Il protocollo HTTP / Parte 1

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:

  1. 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
  2. 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.

Riferimenti

0 commenti:

Posta un commento

Lettori fissi

 
DISCLAIMER: Questo blog non costituisce una testata giornalistica. Non ha carattere periodico ed è aggiornato secondo la disponibilità e la reperibilità dei materiali. Pertanto non può essere considerato in alcun modo un prodotto editoriale ai sensi della Legge. n. 62 del 2001.
COPYRIGHT: Tutti i diritti sui testi/contenuti presenti su questo blog sono di proprietà dell'autore. Per utilizzare il materiale contattarmi all'indirizzo: nevit76@gmail.com