# 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](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/richiesta-http/ "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:

[![Immagine: Screenshot di un header HTTP di risposta](https://www.ionos.it/digitalguide/fileadmin/_processed_/1/c/csm_http-response-header_181093208a.webp "Screenshot di un header HTTP di risposta")](https://www.ionos.it/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/http-response-header.png) Screenshot di un header HTTP di risposta 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](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/spiegazione-dei-piu-importanti-codici-di-stato-http/), 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

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

### HTTP Response – la riposta del server

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


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/http-header/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/http-header/) for AI/LLM consumption.