| Tecnologia di Internet | |||
|
|||
| Livello OSI di riferimento: applicazione |
Tutte le comunicazioni tra client e server web avvengono mediate il protocollo HTTP (HyperText Transfer Protocol, attualmente alla versione 1.1), che è un insieme di regole per richiedere e fornire risorse Internet.
Risorsa è un termine generale che comprende i file ma non è limitato ad essi: è qualunque informazione che possa essere identificata da un URL (la R di URL sta per risorsa). Discuteremo più avanti dellURL, ma è essenzialmente un metodo per dire di quale risorsa il client necessita (in altre parole lindirizzo della risorsa) Il tipo più comune di risorsa è il file (una pagina ipertestuale, una immagine), ma una risorsa può anche essere il risultato di una richiesta, loutput di uno script CGI o altro. Il protocollo HTTP definisce un metodo di interazione client-server ottimizzato per le connessioni brevi e veloci necessarie per le connessione tra client web e server web. Si tratta di un protocollo generico, stateless e leggero. Generico, significa facilmente estensibile per comprendere servizi di vario tipo, non solo transazione ipertestuali.Stateless significa che, tra una connessione e laltra, il server non tiene nota della connessione precedente, e quindi tutte le connessioni sono trattate alla stessa maniera, come se si trattasse ogni volta di un nuovo client. Leggero, significa che il client si connette al server solo per il tempo strettamente necessario per trasmettere la risorsa, e quindi chiude la connessione. Si tratta di un funzionamento molto diverso da altri server, per esempio FTP, in cui la connessione è tenuta aperta per tutto il tempo che lutente desidera, anche se non cè nessun file da trasferire. |
||
| LURL è il modo utilizzato nel protocollo HTTP per indicare la risorsa richiesta. La forma generale dellURL è la seguente
http://server[:port]/[path/][file] dove server è lindirizzo internet del server HTTP (il nome o lindirizzo IP). port è il numero della porta a cui connettersi: può essere omesso, e in tal caso prende il valore di default 80. Il path indica al server la directory del file richiesto, e file è il nome del file. Per esempio lURL http://www.microsoft.com:80/jobs/consult.htm chiede di utilizzare il protocollo HTTP per reperire sul server web il cui nome è www.microsoft.com e che risponde alla porta 80 il file consult.htm che sta nella directory jobs. Più avanti vedremo forme di URL che possono invocare protocolli diversi (per esempio FTP). |
|||
| URI (Uniform Resource Indentifier) è il termine generico con cui si indicano tutti i modi indirizzo/nome che si utilizzano per riferirsi ad una risorsa. URL è un particolare tipo di URI. | |||
| Un client HTTP apre una connessione e spedisce una richiesta al server HTTP. Il server risponde con un messaggio che normalmente contiene la risorsa richiesta. Dopo aver risposto il server chiude la connessione (HTTP è un protocollo stateless, cioè non conserva informazioni di connessione tra una transazione e laltra).
Il modello di transazione di HTTP è molto semplice, e questa è la principale ragione per cui si può facilmente estendere. Una tipica transazione avviene così:
|
|||
|
Forma generale Client e server HTTP discutono tra loro con il protocollo HTTP. Una richiesta HTTP, fatta dal client al server, è di questo tipo generale: <METHOD> <URI> HTTP/1.0 <CRLF> E il server risponde in questo modo HTTP/1.0 <STATUS_CODE> <REASON><CRLF> METHOD è una singola parola che dice al server che tipo di richiesta viene fatta. URI è una parte dellURL che essenzialmente dice il percorso e il nome della risorsa richiesta. CRLF sono due caratteri ASCII (13 e 10) di a capo e fine linea. Le righe di Header successive possono comprendere informazioni aggiuntive, come il nome del software client (User-Agent) e i tipi di MIME che il client può trattare. BODY sono dati opzionali che possono essere aggiunti in qualche richiesta. La risposta comprende, oltre alla versione di HTTP, uno STATUS_CODE cioè un codice ddi tre cifre che indica lo stato della risposta e REASON, il motivo della risposta. BODY contiene i dati che vengono trasferiti al client. Esempio Se un browser vuole ricevere il file specificato dallURL http://www.somehost.com/abc/saluti.html dapprima apre una connessione con lhost www.somehost.com alla porta 80 (porta di default, poiché nellURL non è specificata alcuna porta). Quindi spedisce attraverso la connessione la richiesta GET /abc/saluti.html HTTP/1.0 Il server risponde con qualcosa di questo tipo, trasmesso attraverso la stessa connessione HTTP/1.0 200 OK <html> Dopo aver mandato la risposta il server chiude la connessione. Nella richiesta, GET è il metodo di richiesta, significa dammi questa risorsa. Attualmente sono specificati nel protocollo HTTP sette metodi, ma solo due o tre sono comunemente usati (oltre a GET, POST e HEAD). abc/saluti.html è il cammino e il nome del file richiesto (URI, una parte dellURL). La versione HTTP è sempre della forma HTTP/x.x. Accept viene utilizzato per indicare la lista dei dati che il client può trattare. In questo caso testo (sia con tag HTML che senza tag) e immagini GIF. Nella risposta, 200 è il codice di stato (indica che la richiesta ha avuto buon fine), OK è la spiegazione in lettere del codice di stato. Seguono altre informazioni e quindi lintera pagina HTML richiesta. |
|||
| Nel protocollo HTTP 1.0 sono specificati sette metodi di richiesta, cioè sette tipi di transazione. Solo due o tre di esse sono comunemente usati, e in futuro ne possono essere aggiunti altri.
GET è il metodo più usato per chiedere informazioni a un server. Quando un utente fa clic su un link di una pagina web, il client spedisce una richiesta GET per avere lURL (cioè la risorsa) specificato nel link. Il metodo GET può anche essere usato per trasmettere una richiesta ad una applicazione CGI che, come risultato del suo processo, restituisce dati. In tal caso i dati in ingresso allapplicazione CGI vengono aggiunti in fondo allURL (cioè allindirizzo dellapplicazione) separati da un punto di domanda (?). POST è il metodo usato per spedire ad un server dati devono essere processati in qualche modo, per esempio da una applicazione CGI. Le differenze rispetto ad un GET sono queste:
|
|||
La risposta del server HTTP alle domande del client HTTP comprende un codice di stato di tre cifre che indica lo stato della risposta. Tutti i codici che iniziano con 1 sono informativi, con 2 significano successo, con 3 ridirezione, con 4 errore del client, con 5 errore del server. Eccone alcuni:
|
|||
Recentemente è stata definita la versione 1.1 di HTTP che porta tra laltro i seguenti miglioramenti:
|
|||
|
|||