Requisiti
Per proseguire potrebbe essere utile la lettura di:
Introduzione e funzionamento del protocollo
L'HTTP (HyperText Transfer Protocol) è un protocollo a livello applicazione (modello OSI) utilizzato per consegnare/trasferire risorse nel World Wide Web.
Per risorsa si intende un qualsiasi oggetto o servizio identificato da un URI: un file (es. un file .html), la risposta di uno script eseguito su server (in qualsiasi formato), etc.
L'HTTP è un protocollo di tipo request/respose, che generalmente funziona in questo modo:
- Un client HTTP apre una connessione verso un server HTTP e gli invia un messaggio di richiesta indicando l'URI della risorsa che vuole ottenere
- Il server restituisce un messaggio di risposta, che contiene (tipicamente) la risorsa richiesta dal client, e chiude la connessione.
Occorre fare 2 precisazioni:
- non tutte le richieste del client vogliono una risorsa di conseguenza non è detto che ogni risposta del server restituisca anche la risorsa
- al termine della connessione/transazione HTTP il server dimentica completamente il client che ha fatto la richiesta. In altri termini se il client effettuerà una successiva richiesta il server non ricorderà che è lo stesso client che ha fatto una richiesta in precedenza. In tal senso il protocollo HTTP è detto anche stateless
Messaggi di richiesta e di risposta
I messaggi di richiesta del client e i messaggi di risposta del server hanno la stessa struttura:
- una riga iniziale usata dal client per indicare al server la sua richiesta e usata in risposta dal server per indicare al client l'esito / stato della sua richiesta
- l'intestazione formata da 0 o più righe usata per indicare informazioni aggiuntive sia per la richiesta che per la risposta
- una riga vuota che separa l'intestazione dal messaggio o indica la fine del messaggio (se non c'è corpo)
- il corpo del messaggio (opzionale) che contiene la risorsa o i dati della richiesta
Tutte le righe sono terminate con un ritorno a capo (CRLF).
Più formalmente, utilizzando l'EBNF, i messaggi (richiesta e risposta) possono essere rappresentati nel modo seguente:
riga-iniziale CRLF (intestazione CRLF)* CRLF (corpo-messaggio)?
In seguito si forniranno le regole di produzione per tutti i simboli.
Il messaggio, se presente, in genere è descritto da 2 righe sull'intestazione che ne indicano il Mime-Type e la dimensione.
Riga iniziale
riga-iniziale := riga-richiesta | riga-di-stato
Versione HTTP
Per l'indicazione della versione in uso HTTP utilizza il formato maggiore.minore
.
L'incremento di minore
indica che la struttura del messaggio non ha subito variazioni, ma sono solo state aggiunte funzionalità. Il parser dei messaggi quindi sarà ancora in grado di leggere i messaggi ma, eventualmente, non sarà in grado di interpretare o rispondere a funzionalità aggiuntive.
Un incremento di maggiore
indica invece che è stata modificata la struttura del messaggio. In questo caso i parser di versioni precedenti non saranno in grado di leggere il messaggio.
La versione è sempre presente nella riga iniziale dei messaggi. Questo permette al mittente di indicare al destinatario le sue capacità di capire il formato o le funzionalità dell'HTTP.
La sintassi usata per indicare la versione nel messaggio è la seguente:
Versione-HTTP := 'HTTP' '/' (DIGIT)+ '.' (DIGIT)+
DIGIT := '0', '1', ..., '9'
Formati data/ora
Intestazione
L'intestazione contiene coppie chiave valore della forma "nome: valore" che terminano con un ritorno a capo.
La seconda parte di questa breve guida contiene una destrizione dettagliata dei messaggi.
0 commenti:
Posta un commento