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:

 

  • Strato fisico
  • Strato di collegamento dati
  • Strato di rete
  • Strato di trasporto
  • Strato di sessione
  • Strato di presentazione
  • Strato di applicazione
  •  

    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:

     

  • GET
  • HEAD

  • POST

     

    Allo scopo di comprendere meglio il significato dei metodi visti, vediamo alcuni esempi di Request-Line:

     

     

     

     

    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:

     

    • MIME-version

    Il campo indica la versione MIME usato nel messaggio.

     

    • Content-Type

    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)

    • Content-Transfer-

    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.

     

    • Content-ID

    Questo campo identifica in modo univoco il messaggio (opzionale).

     

    • Content-description

    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>

     

    1. Il browser inizia analizzando l'URL e scopre che:

     

    1. Il browser "domanda" al DNS (Domain Name Server) di convertire l'indirizzo host www.host.it in indirizzo IP numerico.

       

    2. Il DNS replica con lindirizzo IP numerico, per esempio 131.114.189.11

       

    3. Il browser stabilisce una connessione con il server sulla porta TCP 80 il cui indirizzo IP è 131.114.189.11. Per stabilire la connessione il browser ed il server usano un handshake a tre vie.

       

    4. A questo punto, il browser compone la richiesta secondo il formato HTTP e l'invia al server. Richiesta del tipo:

       

      GET /path/doc.html HTTP/1.0

      User-Agent: Internet Explorer/3.02

      Accept: text/plain

      Accept: text/html

      Accept: image/*

       

    5. IL server riceve la richiesta e analizza la prima parte (GET /Path/doc.html HTTP/1.0).

     

    1. Il server , se necessario, analizza il resto della richiesta. In questo caso estrapola le seguenti informazioni:

     

     

    1. Se non ci sono stati errori, il server esegue il metodo richiesto: cerca il file avvalendosi del file system del sistema operativo e:

     

     

    1. Il server dopo aver inviato la risposta chiude la connessione con il browser.

       

    2. Il browser dopo aver memorizzato ed analizzato la risposta, mostra sullo schermo il documento utilizzando l'applicazione opportuna.

     

    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.

     Indietro

    Indice 

    Avanti