Il protocollo HTTP

Il [/ protocollo] HTTP (HyperText Transfer Protocol) è il protocollo più usato su internet dal 1990. La versione 0.9 era destinata solo ai trasferimenti di dati su internet (in particolare delle pagine web scritte in HTML. La versione 1.0 del protocollo (la più usata) permette ormai di trasferire dei messaggi con delle intestazioni che descrivono il contenuto del messaggio utilizzando una codificazione di tipo [/ MIME].

Lo scopo del protocollo HTTP è di permettere un trasferimento di file (essenzialmente in formato [/ HTML]) localizzati grazie ad una stringa di caratteri detta [/ URL] tra un [/ browser] (il [/ client]) e un server web (detto httpd sui terminali [/ UNIX]).

Comunicazione tra browser e server

La comunicazione tra il browser e il server avviene in due tempi:

Comunicazione tra browser e server

Il browser effettua una richiesta HTTP;

Il server tratta la richiesta poi invia una risposta HTTP In realtà la comunicazione si effettua in più volte se si considera l'elaborazione della richiesta dal server. Dato che si interessa solamente al protocollo HTTP, l'elaborazione del lato server non sarà esplicito in questo articolo. Se siete interessati a questo argomento, fate riferimento all'articolo sul trattamento delle CGI.

Richiesta HTTP

Una richiesta HTTP è un insieme di righe inviate al server dal browser. Essa comprende:

Una riga di richiesta, è una riga che precisa il tipo di documento richiesto, il metodo che deve essere applicato, e la versione del protocollo usato. La riga comprende tre elementi che devono essere separati da uno spazio:

Il metodo;

L'URL;

La versione del protocollo usato dal client (generalmente HTTP/1.0).

I campi d'intestazione della richiesta, si tratta di un insieme di righe facoltative che permettono di dare delle informazioni supplementari sulla richiesta e/o il client (browser, sistema operativo, ecc.). Ognuna di queste righe è composta da un nome che qualifica il tipo di intestazione, seguito da due punti (:) e dal valore dell'intestazione;

Il corpo della richiesta, è un'insieme di righe opzionali che devono essere separate dalle righe precedenti da una riga vuota e che permettono ad esempio l'invio di dati con un comando POST quando si inviano dei dati di un modulo al server.

Una richiesta HTTP ha quindi la seguente sintassi (<crlf> significa ritorno a capo o salto di riga):

METODO URL VERSIONE <crlf> 
INTESTAZIONE: Valore <crlf>
.
.
.
INTESTAZIONE: Valore <crlf>
riga vuota<crlf>
CORPO DELLA RICHIESTA

Qui di seguito un esempio di richiesta HTTP:

GET [/ https://it.ccm.net/] HTTP/1.0 
Accept: text/html
If-Modified-Since: Saturday, 15-January-2000 14:37:11 GMT
User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)

Comandi

Comando</span> Descrizione</span>
GET Richiesta della risorsa situata ad un URL specifico
HEAD Richiesta dell'intestazione della risorsa posta ad un URL specifico
POST Invio di dati al programma posto ad un URL specifico
PUT Invio di dati all'URL specifico
DELETE Soppressione della risorsa posta all'URL specifico

Intestazioni

Nome dell'intestazione</span> Descrizione</span>
Accept Tipo di contenuto accettato dal browser (ad esempio text/html)
Accept-Charset Combinazione di caratteri attesa dal browser
Accept-Encoding Codifica di dati accettata dal browser
Accept-Language Linguaggio atteso dal browser (inglese di default)
Authorization Identificazione del browser presso il server
Content-Encoding Tipo di codifica del corpo del testo
Content-Language Tipo di linguaggio del corpo della richiesta
Content-Length Lunghezza del corpo della richiesta
Content-Type Tipo di contenuto del corpo della richiesta (ad esempio text/html)
Date Data di inizio del trasferimento dei dati
Forwarded Usato dai terminali intermedi tra il browser e il server
From Permette di specificare l'indirizzo e-mail del client
From Permette di specificare che il documento deve essere inviato se è stato modificato dopo una certa data
Link Relazione tra due URL
Orig-URL URL d'origine della richiesta
Referer URL del link a partire dal quale la richiesta è stata effettuata
User-Agent Stringa che da informazioni sul client, come il nome e la versione del browser, del sistema operativo

Risposta HTTP

Una risposta HTTP è un insieme di righe inviate dal server al browser. Essa comprende:

una riga di stato, è una riga che precisa la versione del protocollo usata e lo stato di elaborazione della richiesta attraverso un codice e un testo chiarificante. La riga comprende tre elementi che devono essere separati da uno spazio:

La versione del protocollo usata;

Il codice dello stato;

Il significato del codice.

I campi d'intestazione della risposta, si tratta di un insieme di righe facoltative che permettono di dare delle informazioni supplementari sulla risposta e/o il server. Ognuna di queste righe è composta da un nome che qualifica il tipo di intestazione, seguito da due punti (:) e dal valore dell'intestazione;

Il corpo della risposta: contiene il documento richiesto.

Una risposta HTTP a la seguente sintassi (<crlf> significa ritorno a capo o salto di riga):

VERSIONE-HTTP CODICE SPIEGAZIONE <crlf> 
INTESTAZIONE: Valore <crlf>
.
.
.
INTESTAZIONE: Valore <crlf>
riga vuota<crlf>
CORPO DELLA RISPOSTA

Qui di seguito un esempio di risposta HTTP:

HTTP/1.0 200 OK 
Date : Sat, 15 Jan 2000 14:37:12 GMT
Server : Microsoft-IIS/2.0
Content-Type : text/HTML
Content-Length : 1245
Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT

Intestazioni di risposta

Nome dell'intestazione</span> Descrizione</span>
Content-Encoding Tipo di codifica del corpo della risposta
Content-Language Tipo di linguaggio del corpo della risposta
Content-Length Lunghezza del corpo della risposta
Content-Type Tipo del contenuto del corpo della risposta (ad esempio text/html)
Date Data di inizio del trasferimento dei dati
Expires Data limite di consumo dei dati
Forwarded Usato dai terminali intermedi tra il browser e il server
Location Redirezione verso un nuovo URL associato al documento
Server Caratteristiche del server che ha inviato la risposta

I codici di risposta

Sono i codici che vedete quando il browser non riesce a fornire la pagina richiesta. Il codice di risposta è costituito da tre cifre. La prima indica la classe dello stato e le seguenti la natura esatta dell'errore:

Codice Messaggio Descrizione
10x Messaggio di informazione Questi codici non sono usati nella versione 1.0 del protocollo
20x Riuscito Questi codici indicano il buon svolgimento della transazione
200 OK La richiesta si è compiuta correttamente
201 CREATED Esso segue un comando [/ POST], e indica la riuscita, il corpo del resto del documento ed è previsto che indichi l'URL nel quale il documento appena creato dovrebbe trovarsi.
202 ACCEPTED La richiesta è stata accettata, ma la procedura successiva non è stata effettuata
203 PARTIAL INFORMATION Quando si riceve questo codice in risposta ad un comando GET, indica che la risposta non è stata completata.
204 NO RESPONSE Il server ha ricevuto la richiesta ma non ha l'informazione da rinviare
205 RESET CONTENT Il server indica al browser di sopprimere il contenuto dei campi di un modulo
206 PARTIAL CONTENT Si tratta di una risposta ad una richiesta che comporta l'intestazione range. Il server deve quindi indicare l'intestazione content-Range
30x Redirection Questi codici indicano che la risorsa non è più nel posto indicato
301 MOVED I dati richiesti sono stati trasferiti ad un nuovo indirizzo
302 FOUND I dati richiesti sono ad un nuovo URL, ma potrebbero essere stai spostati
303 METHOD questo implica che il client debba provare un nuovo indirizzo, usando di preferenza un metodo diverso dal GET
304 NOT MODIFIED Se il client a effettuato un ordine GET condizionale ( richiedendo se il documento è stato modificato rispetto all'ultima volta) e che il documento non è stato modificato, il server invia questo codice.
40x Errore dovuto al client Questi codici indicano che la richiesta non è corretta
400 BAD REQUEST La sintassi della richiesta è mal formulata oppure è impossibile da soddisfare
401 UNAUTHORIZED Il parametro del messaggio da le specifiche delle forme di autorizzazione accettabili. Il client deve riformulare la sua richiesta con i dati d'autorizzazione corretti.
402 PAYMENT REQUIRED Il client deve riformulare la sua richiesta con i dati di pagamento corretti
403 FORBIDDEN L'accesso alla risorsa è stato semplicemente vietato
404 NOT FOUND Classico! Il server non ha trovato niente all'indirizzo specificato.
50x Errore dovuto al server Questi codici indicano che vi è un errore interno al server
500 INTERNAL ERROR Il server a riscontrato una condizione inattesa che gli ha impedito di dare seguito alla richiesta
501 NOT IMPLEMENTED Il server non supporta il servizio richiesto
502 BAD GATEWAY Il server ha ricevuto una risposta non valida dalla parte del server al quale ha cercato di accedere fungendo gateway o proxy
503 SERVICE UNAVAILABLE Il server non può rispondervi in quel momento, dato che il traffico è troppo intenso (tutte le righe della vostra corrispondenza sono occupate, quindi riprovare più tardi)
504 GATEWAY TIMEOUT La risposta del server è troppo lunga rispetto al tempo durante il quale il gateway era pronto ad aspettarlo

Ulteriori informazioni

Per ulteriori informazioni sul protocollo HTTP fare riferimento alla [/ RFC] 1945 che spiega in maniera dettagliata il protocollo:

RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0;

RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1;

[/ Cookie].

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Potrebbe anche interessarti
Il documento intitolato « Il protocollo HTTP » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.