L’header HTTP: una panoramica per gli utenti

Ogni volta che visitate un sito web, il vostro browser invia una richiesta al web server per ottenere i dati e le informazioni necessarie, come ad esempio i file HTML (ossia una pagina web). Sia attraverso la richiesta HTTP, sia con la risposta da parte del server, vengono scambiate una serie di meta informazioni oltre ai soliti dati, riassunte nell’header HTTP. In questo articolo vi spieghiamo che funzione svolge l’header HTTP e quali sono i suoi campi più importanti.

La funzione dell’header spiegata con un esempio

Richiamando il sito web www.example.com, il web server non vi invia in risposta solamente il sito web richiesto, ma anche l’header qui di seguito riportato, che non viene però visualizzato dall’utente:

Le singole righe vengono chiamate “Campi header”. Ciascuna delle quali, la prima esclusa, consiste di una coppia nome/valore separata dai due punti.

Nel seguente elenco vi spieghiamo le informazioni contenute nelle singole righe:

  • HTTP/1.1 fa riferimento alla versione del protocollo HTTP utilizzata.
  • 200 OK è il codice di stato, che informa sull’avvenuto ricevimento, sull’elaborazione e l’accettazione della richiesta da parte del server.
  • Content-Encoding e Content-Type forniscono informazioni in merito alla tipologia del file.
  • Age, Cache-Control, Expires, Vary e X-Cache si riferiscono al caching (salvataggio nella memoria temporanea) del file.
  • Etag e Last-Modified indicano la versione del file inviato.
  • Server comunica il software utilizzato dal web server.
  • Content-Lenght corrisponde alla dimensione del file in bytes.

Come si evince, queste informazioni dell’header servono principalmente per il coordinamento tra client (il vostro browser) e server. Grazie a loro ci si assicura che il client comprenda la forma del file ricevuto, che il file sia sufficientemente aggiornato e che la sua dimensione coincida con quella che è l'aspettativa del browser.

Le righe dell’header riportate nell’esempio sono solamente una minima parte di tutti i campi a disposizione nell’header. Infatti l'header HTTP contiene quasi cento campi, di cui circa trenta solamente per le specifiche della richiesta HTTP, un’altra trentina per la risposta del server e una buona parte dei restanti campi dell’header servono per altri scopi e (almeno per ora) non sono standardizzati.

La seguente tabella vi spiega quali sono i campi dell’header di maggiore importanza.

Panoramica dei campi più importanti dell’header HTTP

HTTP Request – la richiesta del client

Campo dell’header Funzione Esempio
Accept I tipi di contenuto che il client è in grado di elaborare. Se il campo è vuoto significa che è in grado di elaborare tutti i tipi di contenuto Accept: text/html, application/xml
Accept-Charset Quale set di caratteri il client è in grado di mostrare Accept-Charset: utf-8
Accept-Encoding I formati compressi supportati dal client Accept-Encoding: gzip
Accept-Language La lingua desiderata Accept-Language: it-IT
Authorization I dati di autentificazione come ad esempio quelli di login Basic WjbU7D25zTAlV2tZ7==
Cache-Control Le opzioni del meccanismo di caching Cache-Control: no-cache
Cookie I cookie archiviati per questo server Cookie: $Version=1; Content=23
Content-Length Lunghezza del request body (corpo del messaggio) Content-Length: 212
Content-Type Il tipo MIME del body rilevante per le richieste POST e PUT Content-Type: application/x_222-form-urlencoded
Date Data e orario della richiesta Date: Mon, 9 March 2020 09:02:22 GMT
Expect Formula quanto ci si aspetta dal server, che solitamente coincide con il ricevimento di una richiesta esaustiva. Expect: 100-continue (il server deve inviare Code 100, se è pronto ad accogliere la richiesta)
Host Il nome di dominio del server Host: esempio.it
If-Match Esecuzione condizionata di un’azione in base alla corrispondenza del codice inviato If-Match: “ft678iujhnjio90’pöl“
If-Modified-Since Inviare solamente se il contenuto richiesto è stato modificato successivamente alla data/ora indicata IF-Modified-Since: Mon 2 Mar 2020 1:00:00 GMT
If-None-Match Come sopra, ma specificamente per un ETag (Entity-Tag, vedi sotto) If-None-Match: “cxdrt5678iujhgbvb“
If-Range Richiede solo la parte del contenuto che è stata modificata o che manca dalla cache del client If-Range: Mon 2 Mar 2020 1:00:00 GMT
If-Unmodified-Since Il contrario di IF-Modified-Since If-Unmodified-Since: Mon 2 Mar 2020 1:00:00 GMT
Max-Forwards Definisce il limite massimo di quanto spesso può essere inoltrata la risposta del server Max-Forwards: 12
Proxy-Authorization Viene utilizzato per autenticare il client presso un server proxy Proxy-Authorization: Basic WjbU7D25zTAlV2tZ7==
Range Specifica che parte del contenuto viene richiesta Range: bytes=0-9999
Referrer URL della risorsa dalla quale proviene la richiesta (ossia dalla quale è collegata) Referrer: https://esempio.it/index.html
TE Accettazione dell’estensione di codifica di trasferimento TE: gzip, deflate
User-Agent Lo user-agent del client (il browser) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36

HTTP Response – la riposta del server

Campo dell’header Funzione Esempio
Accept-Ranges Quali unità del server sono accettate per il range indicato (vedi sopra) Accept-Ranges: bytes
Age Il tempo in secondi dalla creazione dell’oggetto nella cache Age: 2300
Allow I tipi di richieste ammessi per una determinata risorsa Allow: GET, POST, HEAD
Cache-Control Se e per quanto tempo l’oggetto può essere mantenuto nella cache Cache-Control: max-age=4800
Connection Il tipo di connessione preferito Connection: close
Content-Encoding Tipo di compressione Content-Encoding: deflate
Content-Language Lingua della risorsa Content-Language: it-IT
Content-Length Dimensione del body in bytes Content-Length: 135674
Content-Location Luogo di archiviazione del file, nel caso in cui provenga da un luogo d’archiviazione diverso da quello richiesto (ad esempio CDN). Content-Location: /esempio.it
Content-Security-Policy La politica di sicurezza del server Content-Security-Policy: frame-src 'none’; object-src 'none‘
Content-Type Il tipo di MIME del file richiesto Content-Type: text/tml; charset=utf-8
Date L’orario della risposta Date: Mon 2 Mar 2020 1:00:00 GMT
ETag Indica una versione specifica del file ETag: “vt6789oi8uztgfvbn“
Expires Da quando il file deve essere considerato superato Expires: Tue 3 Mar 2020 1:00:00 GMT
Last-Modified Orario dell’ultima modifica del file Last-Modified: Mon 2 Mar 2020 1:00:00 GMT
Location Contraddistingue il luogo d’archiviazione nel quale viene inoltrata la richiesta Location: https://www.esempio.it
Proxy-Authenticate Indica se e come il client si deve autenticare con il server proxy Proxy-Authenticate: Basic
Retry-After A partire da quando il client deve avanzare un’altra richiesta, nel caso in cui la risorsa sia temporaneamente indisponibile (data o secondi) Retry-After: 300
Server Identificazione del server. Server: Apache
Set-Cookie Posiziona un cookie nel client Set-Cookie: UserID=XY; Max-Age=3800; Version=1
Transfer-Encoding Il metodo di compressione Transfer-Encoding: gpzip
Vary Informa quale campo dell’header vada considerato come variabile nel caso in cui un file viene richiesto dalla cache Vary: User-Agent (= il server ha a disposizione diverse versioni del file in base allo User Agent)
Via Il proxy tramite il quale viene inviata la risposta Via: 1.1www.esempio.it
Consiglio

Potete leggere il response header di tutti i siti web che volete con questo semplice tool. Altrettanto pratica è l’estensione di Chrome HTTP Header Analyzer.


Prepara il tuo business per il successo online
Abbiamo ridotto ulteriormente i prezzi dei nostri strumenti pensati
per incrementare le tue vendite di fine anno.
Risparmia fino al 75%