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.
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
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 |
- Migliore posizionamento su Google senza agenzie esterne
- Risposte veloci a commenti o recensioni sui social media
- Nessuna conoscenza SEO o di marketing online richiesta
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 |