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]).
La comunicazione tra il browser e il server avviene in due tempi:
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.
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)
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 |
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 |
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
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 |
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 |
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.