2. I protocolli del Web
Il capitolo espone le caratteristiche e il funzionamento dei protocolli usati per la comunicazione nel Web. Inizia facendo una breve descrizione dell'architettura di rete e della suite di protocolli TCP/IP e prosegue con una analisi approfondita del protocollo HTTP/1.0.
2.1 Il TCP/IP
Il Web si serve di Internet come base per la comunicazione. Vale la pena quindi, dare una breve descrizione dell'architettura di rete di Internet e dei protocolli che vengono usati.
Internet è un "internetwork", un insieme di reti collegate tra loro allo scopo di collaborare. L'obiettivo dell'intern0etworking è consentire a molte reti di interagire, permettendo ai computer di comunicare tra loro.
Le reti che costituiscono Internet non sono tutte uguali ognuna di esse può utilizzare una tecnologia di rete differente (cavo coassiale, doppino intrecciato, fibra ottica), protocolli di rete diversi (Ethernet, Token Ring, Token Bus, SNA) e computer diversi (PC, maiframe, workstation UNIX). Non solo, le reti sono possedute da governi, università, aziende, singoli utenti, organizzazioni indipendenti ecc.
Alla luce di queste differenze, la domanda è, come fanno tutte queste reti così diverse a comunicare tra loro? La soluzione è ottenuta grazie allutilizzo di opportuni protocolli pubblici comuni e all'utilizzo dei gateway che permettono di collegare reti molto diverse, fornendo agli utenti una visione omogenea.
Per capire il funzionamento di Internet, le sue caratteristiche e l'enorme successo che tuttora sta avendo, bisogna introdurre alcuni concetti sulle architetture di rete.
Le moderne architetture di rete sono organizzate in maniera gerarchica a strati (o livelli).
Lo scopo di ciascuno strato è quello di fornire un servizio allo strato superiore schermandolo dall'implementazione effettiva del servizio offerto. Ogni strato è munito di un interfaccia con lo strato adiacente che definisce le operazioni primitive e i servizi offerti dallo strato inferiore a quello superiore.
Lo strato di una rete può svolgere "conversazioni" solo con lo strato di un'altra rete di pari livello nella gerarchia di rete (processi paritari). L'insieme delle regole e delle convenzioni che stabiliscono come svolgere queste "conversazioni" sono chiamate protocollo.
Il pregio di un organizzazione a strati è che, nell'ipotesi di mantenere inalterata l'interfaccia, si può modificare l'implementazione di uno strato senza dover modificare o cambiare gli altri strati.
L'insieme degli strati e dei protocolli si definisce architettura di rete.
C'è da osservare che mentre i processi paritari (processi che costituiscono gli strati corrispondenti su macchine diverse) considerano la comunicazione in modo diretto (orizzontale), in realtà, quest'ultima avviene attraversando gli strati inferiori della gerarchia (verticale) e solo quando viene raggiunto lo strato fisico il messaggio viene inviato verso la macchina di destinazione. Qui il messaggio risale gli strati inferiori, fino a raggiungere il destinatario: il processo paritario corrispondente. Cè da dire che, al passaggio del messaggio, ogni strato per espletare al meglio il proprio servizio aggiunge allo stesso proprie intestazioni. In figura possiamo osservare le interfacce, gli strati, i protocolli ed un esempio di flusso di comunicazione di una rete a sette strati.
Fig. 2.1 Strati, interfacce, protocolli e flusso di comunicazione
Il modello architetturale che viene preso come riferimento nel progetto delle reti è quello proposto dall'ISO (International Standard Organization) chiamato modello di riferimento OSI[6][4] (Open System Interconnection). Questo modello prevede sette strati.
Fig. 2.2 Architettura di rete basata sul modello OSI.
C'è da notare che il modello di riferimento OSI di per sé non è un'architettura di rete perché non specifica esattamente i servizi ed i protocolli da utilizzare in ciascuno strato, ma si limita a definire ciò che ciascuno strato dovrebbe fare. Il modello prevede sette strati:
Ognuno di essi ha un compito ben preciso definito dal modello.
Come abbiamo detto Internet è un internetwork che grazie ai gateway e all'utilizzo di protocolli pubblici comuni, da una visione omogenea di reti fondamentalmente diverse. In figura viene mostrato un esempio di interconnessione di reti secondo il modello Internet.
Fig. 2.3 Esempio di internetwork, modello Internet.
Il modello architetturale adottato da Internet è chiamato TCP/IP Reference Model[5][4], nome derivato dal nome dei suoi due protocolli più diffusi il TCP (Trasmission Control Protocol) e IP (Internet Protocol). L'IP è un protocollo senza connessione e inaffidabile che si occupa di trasferire i dati (pacchetti) su reti fisicamente diverse e il TCP è un protocollo che garantisce una connessione affidabile tra due computer e si occupa del trasporto affidabile dei dati (in seguito si parlerà in dettaglio di entrambi i protocolli). Questo modello non aderisce perfettamente al modello di riferimento OSI, infatti prevede solo 4 strati.
In figura viene mostrato uno schema semplificato di tale modello:
Fig. 2.4 Modello semplificato dell'architettura di rete TCP/IP.
Ogni computer che segue correttamente le regole del TCP/IP sarà in grado di comunicare con qualsiasi altro computer nella rete che segue le stesse regole. Quindi, un nuovo computer che vuole unirsi a Internet non deve far altro che implementare il protocollo TCP/IP.
La caratteristica più importante di questa suite di protocolli, che ne è stato il motivo della scelta e del suo successo, è che sono protocolli aperti e pubblici, ciò vuol dire, che non sono proprietà di una particolare azienda o legati ad un tipo di computer o rete. Questo ha implicato il rapido diffondersi di implementazioni per ogni tipo di sistema operativo e piattaforma.
I principali vantaggi del TCP/IP sono
Vediamo ora le caratteristiche di ognuno dei 4 strati del modello di riferimento TCP/IP.
Il modello di riferimento di TCP/IP non dice molto circa quello che accade qui, eccetto indicare che l'host deve connettersi alla rete usando qualche protocollo così può spedire pacchetti IP su di essa. Questo protocollo non è definito e varia da host a host e rete a rete. Questo perché TCP/IP è più orientato all'interconnessione di reti e a come i dati vengono trasferiti tra di esse in modo più trasparente possibile che a come i dati viaggiano all'interno di una singola rete. Questo strato corrisponde allo strato 1 e 2 del modello OSI. I suoi compiti sono quelli di trasportare l'informazione da una rete ad un altra tramite un canale di comunicazione, per esempio un cavo coassiale, fibre ottiche ecc. Inoltre tale strato si occupa di fornire un canale affidabile per la trasmissione di frame da un IMP al suo vicino.
IP è un protocollo senza connessione. Il compito di questo protocollo è quello di istradare i pacchetti (datagrammi nel contesto IP) affinché arrivino a destinazione. Esso si basa sull'idea dei datagrammi, nessun percorso è stabilito in anticipo. Ciascun datagramma inviato è istradato indipendentemente dai suoi predecessori e quindi datagrammi successivi possono seguire percorsi diversi.
Il protocollo IP non garantisce che i datagrammi arrivino a destinazione e non garantisce nemmeno che due o più datagrammi, inviati allo stesso destinatario, arrivino nell'ordine in cui sono stati spediti. È compito dello strato di trasporto rimediare a tali inadempienze.
Una caratteristica importante del protocollo IP è che definisce uno schema per l'assegnazione di un indirizzo unico a ogni computer di ogni rete. Questo indirizzo non dipende dal tipo di computer o dal funzionamento di un determinata rete. Questo rende possibile il trasferimento di dati tra computer appartenenti anche a reti non connesse direttamente. Gli indirizzi definiti da IP sono organizzati gerarchicamente, con reti, sottoreti e host. Quindi l'indirizzo IP di un host è dato da "rete-sottorete-host". Gli indirizzi IP sono numeri a 32 bit. Un esempio di indirizzo IP è dato da: 131.114.11.132.
Vediamo adesso come è fatto un datagramma IP. Un datagramma IP consiste di una parte d'intestazione ed una parte di testo. L'intestazione contiene informazioni che permettono al datagramma di transitare attraverso i gateway e raggiungere la sua destinazione. Tra i campi contenuti nell'intestazione ci sono:
Lo strato di trasporto di Internet contiene due protocolli il TCP (Trasmission Control Protocol) e l'UDP (User Datagram Protocol).
Il TCP garantisce una connessione affidabile tra due computer. Utilizza i pacchetti IP per trasportare i dati dal computer mittente al destinatario. Ma, come abbiamo detto, IP è un protocollo senza connessione, non garantisce che tutti i pacchetti arriveranno a destinazione e in quale ordine. Il TCP si occupa di risolvere questi problemi controllando che tutti i pacchetti arrivino a destinazione e ordinando quelli non in sequenza. In altre parole TCP gestisce la connessione mentre IP si occupa del trasferimento dei pacchetti. Il protocollo TCP, quindi, è un insieme di regole per lo scambio dei messaggi in grado di fornire una trasmissione affidabile dei dati su una connessione di rete. Il protocollo TCP non è specifico di una sola rete, ma è specificatamente progettato per permettere la cooperazione tra diversi computer e reti.
Il TCP aggiunge proprie informazioni, sotto forma di campi dintestazione, al pacchetto che invia. Alcuni di questi campi sono elencati di seguito:
L'intestazione completa di un messaggio TCP è riportata in figura:
Fig. 2.5 Intestazione di un messaggio TCP.
Vediamo per ultimo come il TCP stabilisce e chiude una connessione di rete. La tecnica usata dal TCP è chiamata handshake a tre vie. Un esempio di impostazione della connessione tramite questa tecnica è illustrato in figura:
Fig. 2.6 Metodo per stabilire una connessione con lhandshake a tre vie.
La connessione TCP è a doppio senso: ogni parte può originare i messaggi, a prescindere da chi ha iniziato la connessione.
L'altro protocollo presente nello strato di trasporto di Internet è lUDP tale protocollo è senza connessione e inaffidabile: questo vuol dire che l'invio di messaggi avviene senza stabilire alcuna connessione e che non garantisce né la consegna, né il rispetto della sequenzialità degli stessi.
L'intestazione di un messaggio (datagramma) UDP è mostrato in figura:
Fig. 2.7 Intestazione del datagramma UDP.
Questo strato contiene tutti i dettagli relativi alle applicazioni o ai servizi specificatamente creati per gli utenti di rete.
È in questo strato che troviamo, per esempio, il servizio per il trasferimento di file tra host che si basa sul protocollo FTP (File Transfer Protocol), il servizio Web basato sul protocollo HTTP (HyperText Transfer Protocol), il servizio di posta elettronica basato sul protocollo SMTP (Simple Mail Transfer Protocol) e il login remoto basato su TELNET.
Vale la pena sottolineare, che se il Web non poteva esistere senza Internet, quest'ultima deve il suo strepitoso successo al Web, il quale ha permesso a tutti, anche ai non esperti del settore, non solo di conoscere le potenzialità offerte da Internet ma anche di poter usare tutti i suoi servizi in modo facile mascherando le complesse tecnologie che gli permettono di funzionare.
2.2. LHTTP/1.0
L'HyperText Transfert Protocol (HTTP) è il protocollo di livello applicazione ideato per soddisfare le esigenze di sistemi ipermediali distribuiti sulle reti. I client e i server Web utilizzano tale protocollo per trasportare su Internet i documenti Web che contengono elementi ipermediali.
Prima di addentrarci nei dettagli delle caratteristiche del protocollo, bisogna introdurre alcuni termini.
Risorsa | indica un oggetto di dati o un servizio di rete che può essere identificato da un riferimento univoco e ben definito chiamato URI (Uniform Resource Identifier). Un URI può essere un sito e allora prende il nome di URL (Uniform Resource Locator)
|
Connessione | un circuito virtuale stabilito tra due parti allo scopo di comunicare
|
Messaggio | sequenza strutturata di ottetti trasmessa attraverso la connessione, come oggetto fondamentale di comunicazione
|
Entità | una particolare rappresentazione o traduzione di una risorsa che può essere inclusa in un messaggio di richiesta o di risposta. Un'entità si compone di due parti, la prima consiste di metainformazioni nella forma di intestazione di entità (entity headers) e la seconda che rappresenta il contenuto del messaggio vero e proprio nella forma di corpo dellentità (entity body).
|
Richiesta | un messaggio di richiesta HTTP
|
Risposta | un messaggio di risposta HTTP
|
Client | un programma che stabilisce la connessione con lo scopo di inviare una richiesta
|
User agent | il client che inizia una richiesta. Di solito browsers
|
Server | un programma che accetta la connessione con lo scopo di servire le richieste spedendo indietro al client opportune risposte.
|
Origin server | il server dove una data risorsa è memorizzata o sul quale verrà creata
|
proxy | Un programma intermediario il quale lavora sia come server che come client allo scopo di inoltrare le richieste. Un caching proxy è un proxy server con una cache locale di risorse, alcune richieste di risorse verranno quindi servite dalla cache locale invece che dal server di origine.
|
Gateway | un server che agisce come intermediario per diversi altri server. Diversamente dal proxy, il gateway riceve richieste come se fosse il server d'origine per la risorsa richiesta; il client richiedente può non essere consapevole che sta comunicando con un gateway. I gateway sono spesso utilizzati come ingressi dal lato server attraverso firewall e come traduttori di protocollo per laccesso alle risorse memorizzate in sistemi non HTTP
|
Il protocollo HTTP si basa su un semplice paradigma di richiesta/risposta.
Un client
Il server
Le regole dell'HTTP stabiliscono come formulare correttamente la richiesta e la risposta. L'HTTP invece non stabilisce come è realizzata e gestita la connessione e neppure come vengono trasmesse le informazioni; tutto questo è compito dei protocolli di livello inferiore quali TCP/IP.
Come sappiamo, il client permette il recupero e la visualizzazione di documenti che possono essere formati da testo, immagini, suoni, video e combinazione degli stessi, ognuno di questi documenti ha una codifica digitale diversa in base a ciò che contengono. Come fa il browser a visualizzarli correttamente? Ammettendo anche che possa visualizzarli correttamente, come può riconoscere correttamente ogni documento o ogni sua parte? La risposta è che il client utilizza uno standard internazionale chiamato MIME (Multipurpose Internet Mail Extensions) che definisce le regole per lo scambio di informazione che potrebbero contenere parti non di testo. Il server quando invia un documento Web al client, pone in un campo di intestazione che precede il documento, il tipo e sottotipo MIME relativo al documento stesso, così il client sa, analizzando tale campo, come decodificarlo e visualizzarlo correttamente.
L'HTTP è un protocollo ad assenza di stati (stateless), questo significa che il client e il server devono stabilire e poi chiudere una connessione di rete per ogni transazione HTTP. Né il browser né il server hanno la responsabilità di ricordarsi dell'ultimo stato della connessione.
La più semplice delle comunicazioni HTTP è quella con una singola connessione tra user agent e origin server.
Fig. 2.8 Flusso di richiesta/risposta con una singola connessione.
Una situazione più complicata si ha quando tra l'user agent e l'origin server ci sono uno o più intermediari come proxy o gateway.
Un proxy è un agente inoltrante che ricevendo richieste per un URI nella sua forma assoluta, riscrive tutte le parti del messaggio e inoltra la richiesta riformattata verso il server identificato dall'URI.
Un Gateway è un agente ricevente, che agisce come intermediario tra server diversi, traducendo se necessario da un protocollo o servizio ad un altro in modo che possano comunicare. La figura seguente mostra questa situazione:
Fig. 2.9 Flusso di richiesta/risposta con intermediari.
Quando tra un user agent e un server d'origine cè un proxy di cache (o server di cache) la richiesta fatta dall'user agent al server d'origine potrebbe essere soddisfatta dal proxy di cache e non inoltrata al server d'origine. In questo modo si ha il vantaggio di ridurre la lunghezza del flusso richiesta/risposta. Tale flusso è mostrato di seguito:
Fig. 2.10 Flusso di richiesta/risposta con proxy di cache
Benché il flusso sembri lineare, più richieste possono arrivare ai proxy, gateway o origin server. Quindi, per esempio, un proxy può trovarsi nella situazione di gestire più richieste entranti.
Su Internet, le comunicazioni HTTP generalmente avvengono sulla connessione TCP/IP. La porta di default è TCP 80, ma possono essere usate anche altre porte. Il protocollo HTTP è stato costruito per essere implementato su qualunque protocollo di trasporto, non necessariamente il TCP. L'HTTP vuole solamente uno strato di trasporto che garantisca l'affidabilità.
2.2.1 I messaggi HTTP
I messaggi HTTP sono costituiti da richieste inviate dal client al server e da risposte inviate dal server al client.
Sia i messaggi di richiesta che quelli di risposta possono essere codificati nel formato semplice (tipico dell'HTTP/0.9) o in quello completo (introdotto con l'HTTP/1.0).
Il formato semplice non viene quasi più usato, anzi è sconsigliato dallo standard,
la richiesta è formata dal metodo GET, seguito da un indirizzo URI di una risorsa a cui applicare il metodo,
la risposta è formata dal solo corpo dell'entità richiesta.
Il formato completo è invece più complesso.
Il formato della richiesta è composto da una linea di richiesta (Request-Line), seguita opzionalmente da campi d'intestazione (Header) e infine dal corpo del messaggio (Entity-Body). In dettaglio, il formato di una richiesta HTTP/1.0 è il seguente:
Fig. 2.11 Formato di una richiesta HTTP/1.0
La Request-Line indica al server il Metodo da applicare alla risorsa identificata dallURI e quale versione del protocollo usare per comunicare.
I metodi HTTP più comuni sono:
richiede a un server di recuperare le informazioni identificate dall'URI. Il metodo GET diventa un GET condizionale se la richiesta inviata dal client contiene un campo di intestazione If-Modified-Since. Un metodo GET condizionale dice al server di recuperare la risorsa identificata dall'URI solo se la risorsa è stata modificata dopo la data indicata nel campo If-Modified-Since. Se il client ha già recuperato la risorsa e memorizzata nella cache, il GET condizionale riduce il carico della rete in quanto si evitano trasferimenti di dati superflui.
Esempio: GET /dir/doc.html HTTP/1.0
questo metodo è uguale al metodo GET, la sola differenza sta nel fatto che il server non restituisce l'entità all'interno della risorsa. Le applicazioni utilizzano tale metodo per avere informazioni (i dati dell'intestazione chiamate anche metainformazioni) sulla risorsa identificata dall'URI, senza trasferire il corpo della risorsa (Entity-Body).
Esempio: HEAD /dir/doc.html HTTP/1.0
questo metodo permette di appendere delle pagine alla risorsa indicata nell'URI. Quindi un POST serve ad incrementare un database, a scrivere a newsgroup, a mailing list, fornire dati di input agli script. Il messaggio inviato con un POST è considerato come un subordinato della risorsa indicata nella request-URI.
Esempio: POST /cgi-bin/script HTTP/1.0
.......................
[input script]
HTTP prevede l'aggiunta di altri metodi (extension-method), ovviamente il nuovo metodo deve essere implementato sia nel client che nel server affinché tutto funzioni.
Allo scopo di comprendere meglio il significato dei metodi visti, vediamo alcuni esempi di Request-Line:
GET /dir/doc.html HTTP/1.0
Questa richiesta ordina al server di recuperare il documento doc.html la cui directory è /dir e di restituire, usando il protocollo HTTP/1.0, il documento recuperato al client.
HEAD /dir/doc.html HTTP/1.0
Questa richiesta ordina al server di restituire metainformazioni (data di creazione, data di ultima modifica, tipo del documento ecc.) associate al documento doc.html la cui directory è /dir al client usando il protocollo HTTP/1.0. Cè da osservare che il server non restituisce il documento al client ma solo le metainformazioni.
POST /dir/name.doc HTTP/1.0
...............
[alcuni Headers]
.....................
[contenuto del documento]
....................
Questa richiesta ordina al server di creare un documento nella directory /dir chiamandolo name.doc il cui contenuto è [contenuto del documento] e di restituire al client informazione sullavvenuta esecuzione o meno di tale metodo.
L'header contiene campi che si applicano genericamente sia ai messaggi di richiesta che ai messaggi di risposta, ma non si applicano alle entità che sono trasmesse. Questi header si applicano solamente al messaggio trasmesso. Un General-Header contiene i campi Date, Mime-version e Pragma.
L'Header permette al client di passare al server informazioni aggiuntive sulla richiesta e sul client stesso. I campi di intestazione usati sono: Accept, Authorization, From, If-Modified-Since, Referer, User-Agent.
I campi d'intestazione dell'entità forniscono informazioni aggiuntive, dette metainformazioni, su un'entità (se esiste). Le metainformazioni della risposta dicono al browser che cosa deve sapere per interpretare e visualizzare le informazioni. I campi d'intestazione dell'entità sono: Allow, Content-Encoding, Content-lenght, Content-Type, Expires, Last Modified ed Extension-Header. I campi d'intestazione dell'entità che non vengono riconosciuti sono ignorati.
L'Entity-Body rappresenta il contenuto del messaggio.
Il formato della risposta HTTP è composto da una riga di stato (Status-Line) seguita da campi di intestazione (Header) e corpo dell'entità (Entity-Body). In dettaglio il formato di una risposta HTTP è il seguente:
Fig. 2.12 Formato di una risposta HTTP/1.0
La riga di stato, quindi, mi dice la versione del protocollo usata per la comunicazione, il risultato della richiesta sotto forma di un numero (codice di stato), e una breve spiegazione del significato del numero (motivo).
Esempio:
HTTP/1.0 200 Document follows
questa riga di stato indica che la richiesta è stata soddisfatta e le informazioni verranno fornite.
Ci sono 5 classi di codici di risposta ognuna delle quali contiene un gruppo di codici di stato. Il numero di un codice di stato è composto da tre cifre, la prima indica la classe e le altre due il codice di stato relativo a quella classe. Vediamo un elenco delle classi e alcuni codici di stato con i relativi motivi:
Classe | Spiegazione |
1xx: | Informazioni. Questa classe non è ancora utilizzata, ma è riservata.
|
2xx | Successo: La richiesta è stata ricevuta, compresa e accettata
|
3xx | Redirezione: Servono altre operazioni per completare la richiesta.
|
4xx | Errore del client. (Errori di sintassi o non può essere soddisfatta)
|
5xx | Errore del server.
|
Tab. 2.1 Elenco delle classi dei codici di risposta
Codice | Motivo | Spiegazione |
200 | Document Follow | La richiesta è stata soddisfatta. Seguono le informazioni richieste.
|
201 | Created | Comando POST eseguito con successo, una nuova risorsa è stata creata
|
202 | Request Accepted | La richiesta è stata accettata, ma non ancora eseguita.
|
203 | No Content | Il server ha eseguito la richiesta, nessuna informazione da restituire.
|
300 | Multiple locations | Risorsa travata in più luoghi
|
301 | Moved Permanently | Il documento è stato spostato in un nuovo URL.
|
302 | Moved Temporarily | Il documento è stato spostato temporaneamente in un altro URL.
|
304 | Not Modified | Il documento non è stato modificato dalla data specificata nellheader If-Modified-Since di una richiesta GET condizionale
|
400 | Bad Request from Client | La richiesta del client contiene errori di sintassi.
|
401 | Unauthorized | Richiesta non autorizzata, riprovare con l'autenticazione adeguata.
|
402 | Payment required | Le informazioni richiedono il pagamento di una tariffa. Riprovare con il pagamento adeguato.
|
403 | Forbidden | Accesso vietato alla risorsa.
|
404 | Not Found | Le informazioni non sono state trovate o il permesso è stato negato. Questo si verifica quando lURL non esiste o è stato digitato in modo errato.
|
500 | Server Error | Si è verificato un errore nel server.
|
501 | Not implemented | Il metodo richiesto non è implementato dal server.
|
503 | Service Unavailable | Il server è momentaneamente non disponibile a eseguire la richiesta. Questo può essere dovuto a un temporaneo sovraccarico o a manutenzione. |
Tab. 2.2 Elenco dei codici di stato
Esempio
La figura mostra una possibile Status-Line restituita dal server al client in risposta ad un richiesta GET.
Fig.2.13 Esempio di Status-Line
I campi d'intestazione delle risposte servono per trasmettere informazioni aggiuntive che non possono essere incluse nella riga di stato. Questi campi contengono informazioni che riguardano il server, anziché l'entità. Una risposta può contenere campi di intestazione: Location, Server, WWW-Authenticate. Se un campo della Response-Header non è noto, allora dovrebbe essere trattato dalle unità di destinazione come campo d'intestazione dell'entità (Entity-Header)
2.2.2 Campi dintestazione
Vediamo ora un elenco, con una breve spiegazione, di tutti gli Header HTTP visti.
Date | E' usato per indicare l'ora e la data della risposta.
Es.: Date: sat, 18 dic 1997 02:30:20 GMT.
|
Pragma | E' usato per includere delle direttive specifiche di implementazione che possono essere applicate a ogni destinatario lungo il flusso richiesta/risposta. L'unica direttiva implementata è no-cache. Quando questa direttiva è presente nella richiesta e la stessa passa attraverso un proxy o un gateway che operano da cache, ordina a questi ultimi di inoltrare comunque la richiesta al server d'origine anche se possono soddisfarla utilizzando la cache.
Es.: Pragma: no-cache
|
MIME-version | MIME-vrsion è usato per indicare a quale versione MIME il mesaggio è conforme.
Es.: Mime-version: 1.0
|
Accept | E' usato dal client per indicare al server un elenco di tipi e sottotipi MIME che il client riconosce e supporta. In questo modo il server invierà al client sempre i formati che riconosce. Es.: Accept: text/html Accept: */* |
Authorization | Permette di specificare le credenziali del client per laccesso alle risorse del server.
Es.: Authorization: Basic oTaN25nEg67 dove la stringa "oTaN25nEg67" rappresenta il nome e la password del client
|
From | E' usato per comunicare al server l'indirizzo di posta elettronica del client. In questo modo il server può contattare il client nel caso ci siano problemi.
Es.: FROM: lupiani@cli.di.unipi.it
|
If-Modified-Since | E' usato per trasformare la normale richiesta GET in richiesta condizionale. Permette che la risorsa richiesta venga restituita solo se è più recente della data specificata in questo campo.
Es.: If-Modified-Since: sat, 25 gen 1997 13:00:04 GMT
|
Referer | Serve per specificare al server lURI della risorsa dalla quale è stato ottenuto lURI corrente.
Es.: Referer: http://www.cli.di.unipi.it/home.html
|
User-Agent | Serve per comunicare al server il tipo di browser che ha effettuato la richiesta.
Esempio: User-Agent: Internet Explorer/3.02
|
Location | Viene usato di solito nelle risposte con codici di classe 3xx per contenere l'URL preferito dal server per la ridirezione automatica.
Es.: Location: http://www.host/doc.html
|
Server | Descrive il software utilizzato dal server per soddisfare la richiesta
Es.: Server: CERN/3.0 libwww/2.17.
|
WWW-Authenticate | Da informazioni sullo schema di autenticazione che il client deve utilizzare per accedere alla risorsa richiesta
|
Allow | Elenca i metodi HTTP che devono essere utilizzati sulla risorsa specificata e che sono implementati sull'unità di destinazione. È usato di solito dal client per negoziare i metodi HTTP con il server.
Es.: Allow: GET, HEAD. |
Content-Encodings | Viene utilizzato per specificare la tecnica di compressione utilizzata per il tipo MIME contenuto nell'entità.
Es.: Content-Encodings: x-gzip
|
Content-Lenght | Specifica la dimensione dell'entità trasmessa.
Es.: Content-Lenght: 50372
|
Content-Type | Specifica il tipo e sottotipo MIME dell'entità trasmessa.
Es.: Content-Type: text/html
|
Last-Modified | I server utilizzano tale campo per specificare la data dell'ultima modifica subita dalla risorsa che stanno trasmettendo. Questo campo è utile per i server di cache, perché permette di controllare se una copia di una risorsa nella cache è scaduta o meno.
Es.: Last-Modified: sab, 05 Mar 1972 20:23:04 GMT
|
Expires | Questo campo fornisce la data e l'ora di scadenza di un'entità. Dopo tale data le applicazioni considerano "vecchia" l'entità specificata. Anche questo campo è utile per i proxy di cache i quali non devono mantenere copie di risorse "vecchie" nella cache.
Es: Expires: sab, 25 Gen 1967 20:23:04 GMT
|
2.2.3.MIME
Come abbiamo visto, l'HTTP si serve dello standard MIME[2][3] (Multipurpose Internet Mail Extensions) per definire il formato dei documenti Web inviati dal server al client.
Lo standard MIME specifica come definire il formato sia dei messaggi testuali sia dei messaggi multimediali.
Quando un server Web invia un documento ad un browser che lo ha richiesto, inserisce in un apposito campo dintestazione, chiamato Content-Type, il relativo tipo e sottotipo MIME del documento, (per esempio, se il documento contenesse un video nel formato Mpeg avremmo: Content-Type: video/mpeg), in questo modo il client, una volta ricevuto il documento, ne può capire il formato e visualizzarlo correttamente.
Un documento MIME contiene un'intestazione in cui si trovano i seguenti campi:
|
Il campo indica la versione MIME usato nel messaggio.
|
|
Questo campo specifica il tipo e sottotipo MIME dei dati contenuti nel messaggio. Il tipo identifica la categoria generale di raggruppamento cui appartiene il messaggio, il sottotipo indica il tipo specifico all'interno della categoria generale. Quando il campo Content-Type non è presente nel messaggio, di default si assume il tipo MIME text/plain (testo ASCII non formattato).
La sintassi di questo campo ha la forma: Content-Type: tipo/sottotipo;[parametro] dove parametro è opzionale.
(Una lista di tipi e sottotipi MIME è data alla fine del paragrafo) |
Encoding |
Questo campo specifica un ulteriore codifica dei dati trasmessi, utilizzata per permettere loro di passare attraverso tutti i meccanismi della posta elettronica che potrebbero avere delle limitazioni nel set di caratteri ammessi.
|
|
Questo campo identifica in modo univoco il messaggio (opzionale).
|
|
Questo campo contiene una descrizione testuale del contenuto del messaggio (opzionale)
|
Nella tabella che segue sono elencati alcuni dei tipi e sottotipi MIME più usati.
Tipo | Sottotipo | Descrizione |
text | plain
richtext
html |
indica un testo non formattato (ASCII)
testo formattato: Rich Text Format (RTF)
testo nel formato HTML
|
multipart | mixed
|
usato per combinare in un unico messaggio più entità. Associato a questo tipo cè il parametro FineParte usato per separare le entità contenute nel messaggio.
|
Image | gif
jpeg |
per specificare il formato di un immagine di tipo GIF
per identificare il formato di un immagine di tipo jpeg
|
audio | basic | usato per trasmettere dati di un file audio
|
video | mpeg | usato per trasmettere dati video in formato mpeg |
Tab. 2.3 Elenco dei tipi e sottotipi MIME più usati.
2.2.4 Un esempio di transazione HTTP
Supponiamo che un utente debba recuperare una risorsa posta su un server Web il cui URL è http://www.host.it/path/doc.html.
Possiamo immaginare che l'utente faccia clic su un ancora posta in un documento HTML, quale
<A HREF="http://www.host.it/path/doc.html"> Recupera Doc </A>
GET /path/doc.html HTTP/1.0
User-Agent: Internet Explorer/3.02
Accept: text/plain
Accept: text/html
Accept: image/*
HTTP/1.0 200 document follows
Server: NCSA/2.4
Date: sab, 20 gen 1997, 23:20:02 GMT
Content-Type: text/html
Content-length: 2024
Last-Modified: ven, 19 gen 1997, 23:40:02 GMT
<corpo del documento>
questa risposta dice al browser che è andato tutto bene (codice di stato 200) che il software utilizzato dal server è NCSA/2.4, la data di invio del documento è sab, 20 gen 1997, 23:20:02 GMT, il documento che è in arrivo è nel formato HTML, la lunghezza del documento è di 2024 kb e la data di ultima modifica è ven, 19 gen 1997, 23:40:02 GMT.
HTTP/1.0 404 Not found
Server: NCSA/2.4
Date: sab, 20 gen 1997, 23:20:02 GMT
Content-Type: text/html
Content-length: 0
Cè da aggiungere che se il documento HTML avesse contenuto delle immagini in-line, il browser, per il recupero di ognuna di esse, avrebbe dovuto stabilire una nuova connessione TCP con il server e ripetere ogni passo.