Salta al contenuto

ETag: cos’è l’header HTTP e come funziona

Foto Autore
Contenuto a cura di Roberto Varriale Aggiornato il 17 Ottobre 2026 · Lettura: 11 min

L’ETag (Entity Tag) è un’intestazione di risposta HTTP che il server assegna a una versione specifica di una risorsa, per permettere al browser di verificare se quella versione è ancora valida prima di scaricarla di nuovo. Funziona insieme agli header If-None-Match e If-Match per gestire cache e concorrenza su un sito.

ETag in sintesi

  • Cos’è: una stringa tra virgolette che identifica in modo univoco una versione di una risorsa, generata dal server e restituita nell’header di risposta.
  • A cosa serve: evita di ritrasmettere contenuti invariati (validazione della cache) e previene sovrascritture concorrenti (controllo ottimistico).
  • Header collegati: If-None-Match per la cache, If-Match per la concorrenza.
  • Esiti possibili: risposta 304 Not Modified se la risorsa non è cambiata, 412 Precondition Failed se c’è un conflitto di versione.
  • Tipi: forte (identità byte per byte) o debole, con prefisso W/ (equivalenza semantica).
  • Supporto: funzionalità ampiamente disponibile su tutti i browser principali da luglio 2015.

Scheda tecnica dell’ETag

Tipo di header
Header di risposta e di rappresentazione; non è mai un header di richiesta vietato, il client lo rimanda indietro tramite If-None-Match o If-Match.
Sintassi
Stringa ASCII tra doppi apici, es. ETag: "33a64df55"; se debole è preceduta da W/, es. ETag: W/"0815".
Header di richiesta correlati
If-None-Match per la cache condizionale; If-Match per il controllo di concorrenza sugli aggiornamenti.
Codici di stato collegati
304 Not Modified quando l’ETag inviato dal client coincide con quello corrente; 412 Precondition Failed quando non coincide in una richiesta con If-Match.
Supporto nei browser
Funzionalità ampiamente supportata in tutti i browser principali, disponibile stabilmente da luglio 2015.

Cos’è l’ETag e a cosa serve davvero

Schema di un browser e un server che si scambiano l'header ETag durante una richiesta HTTP
Il server assegna l’ETag alla risposta, il browser lo riusa nella richiesta successiva per chiedere conferma.

L’ETag serve a far sapere al browser se una risorsa è cambiata, senza doverla scaricare di nuovo per intero. Quando analizzo i log di un sito in Search Console o con uno strumento di crawling, vedo spesso pagine, immagini o file JSON che vengono riscaricati a ogni visita anche se non sono cambiati: è il sintomo di un ETag assente o mal configurato.

Il meccanismo è semplice: alla prima richiesta il server restituisce la risorsa insieme a un header ETag. Il browser salva risorsa e valore. Alla richiesta successiva invia quel valore nell’header If-None-Match. Se il server verifica che la versione corrente ha lo stesso ETag, risponde con 304 Not Modified e nessun corpo: il client riusa la copia locale. Se il contenuto è cambiato, il server genera un nuovo ETag e restituisce la risorsa completa.

Oltre alla cache, l’ETag ha un secondo uso meno conosciuto: il controllo ottimistico della concorrenza. Serve quando più processi o utenti possono modificare la stessa risorsa nello stesso momento, per esempio un documento condiviso o un record in una API REST. In quel caso l’ETag diventa una condizione da verificare prima di scrivere, non solo prima di leggere.

L’header compare nel protocollo HTTP, accanto ad altre intestazioni che regolano la cache del sito; chi lavora già con le direttive Cache-Control incontra l’ETag come loro complemento naturale, non come alternativa.

Come funziona la validazione con If-None-Match

Diagramma a tre passaggi del flusso di richieste HTTP con If-None-Match e risposta 304
Tre richieste, due possibili esiti: 304 se l’ETag coincide, risposta piena se è cambiato.

Il flusso di validazione segue sempre la stessa sequenza, indipendentemente dal tipo di risorsa:

  1. Il client richiede una risorsa per la prima volta.
  2. Il server risponde con il contenuto e l’header ETag: "valore".
  3. Il client memorizza risorsa ed ETag; quando la copia locale risulta scaduta, invia una nuova richiesta con If-None-Match: "valore".
  4. Il server confronta il valore ricevuto con l’ETag corrente della risorsa.
  5. Se coincide, risponde 304 Not Modified senza corpo; se non coincide, restituisce la risorsa aggiornata con un nuovo ETag.

Questo è il motivo per cui un sito con ETag configurato correttamente trasferisce meno dati e risponde più in fretta alle richieste ripetute: non è un vantaggio teorico, è un numero che si vede in Search Console e negli strumenti di performance quando si confrontano i tempi di risposta prima e dopo l’attivazione.

Un dettaglio che molte guide saltano: l’ETag va valutato insieme a Cache-Control e Expires. Il browser controlla prima se la copia locale è ancora “fresca” secondo quegli header; solo quando è scaduta invia la richiesta condizionale con If-None-Match. Senza una direttiva di scadenza impostata, l’ETag non interviene affatto, perché il browser userà sempre la copia locale finché non la invalida manualmente.

Come l’ETag previene i conflitti con If-Match

Quando due processi tentano di modificare la stessa risorsa nello stesso momento, l’ETag permette al server di rifiutare la scrittura più vecchia invece di sovrascrivere silenziosamente i dati. Il client invia l’ETag che aveva letto nell’header If-Match insieme alla richiesta di modifica; se nel frattempo la risorsa è cambiata, l’ETag non coincide più e il server risponde 412 Precondition Failed, bloccando l’operazione.

È il caso tipico di un wiki o di un record aggiornato da più utenti: senza questo controllo, l’ultima scrittura vince e cancella le modifiche intermedie senza avviso. Con l’ETag, chi scrive per secondo riceve un errore esplicito e può ricaricare la versione aggiornata prima di riprovare.

Questo uso dell’ETag riguarda soprattutto chi sviluppa API o applicazioni con dati condivisi, meno chi gestisce un sito vetrina o un e-commerce standard: lì il beneficio principale resta la cache, non la concorrenza.

ETag forte o debole: che differenza fa

Un ETag forte garantisce che due versioni della risorsa siano identiche byte per byte; un ETag debole, riconoscibile dal prefisso W/, garantisce solo che siano equivalenti dal punto di vista del contenuto, pur potendo differire in dettagli minimi come i metadati.

Confronto tra ETag forte e debole
Caratteristica ETag forte ETag debole
Formato "valore" W/"valore"
Garanzia Identità byte per byte Equivalenza semantica
Richieste byte-range Supportate e cacheabili Non affidabili per la cache
Facilità di generazione Più complessa su contenuti dinamici Più semplice, adatta a contenuti generati al volo

Nella mia esperienza, la scelta dipende dal tipo di risorsa: su file statici (immagini, CSS, JS) conviene l’ETag forte, perché il contenuto è fisso e il confronto byte per byte non costa nulla in più. Su pagine generate dinamicamente, dove due rendering possono differire per un timestamp invisibile all’utente, l’ETag debole evita di invalidare la cache per cambiamenti che non contano.

Come si genera un ETag

Il protocollo HTTP non impone un metodo di generazione: ogni server può scegliere come costruire il valore, a patto che cambi quando cambia la risorsa. Le tre strade più usate sono un hash del contenuto, un hash del timestamp dell’ultima modifica, o un numero di revisione incrementale.

Se generi l’ETag dall’hash del contenuto

Ottieni il livello di precisione più alto: due versioni identiche producono sempre lo stesso ETag, indipendentemente da quando sono state salvate. Il costo è computazionale, perché ogni risposta richiede di calcolare l’hash prima di inviarla; su siti con traffico alto conviene farlo una volta e salvare il valore insieme al contenuto, non ricalcolarlo a ogni richiesta.

Se generi l’ETag dal timestamp di modifica

Il calcolo è immediato, ma due salvataggi dello stesso identico contenuto in momenti diversi produrranno ETag diversi: il server tratterà come “cambiata” una risorsa che in realtà è rimasta uguale, perdendo parte del risparmio di banda che l’ETag dovrebbe garantire.

Se usi un numero di revisione

È la soluzione più semplice quando il sistema che genera la risorsa tiene già traccia delle versioni (un CMS, un database con colonna di versione): basta esporre quel numero come ETag, senza calcoli aggiuntivi lato server.

Come attivare l’ETag lato server

La procedura è la stessa indipendentemente dal linguaggio o dal framework: cambia solo dove si attiva l’opzione. Molti framework moderni (incluso Express in Node.js e Spring nell’ecosistema Java) generano un ETag debole in automatico su ogni risposta, a meno che non venga disattivato esplicitamente nella configurazione.

  1. Verifica se il framework genera già un ETag di default, guardando gli header di risposta con gli strumenti per sviluppatori del browser.
  2. Scegli il tipo di validatore (forte o debole) in base al tipo di contenuto servito, come indicato nella sezione precedente.
  3. Configura il server o il middleware per calcolare e inviare l’header ETag su ogni risposta che deve essere cacheabile.
  4. Gestisci lato server la lettura dell’header If-None-Match nelle richieste in ingresso e il confronto con l’ETag corrente.
  5. Restituisci 304 Not Modified quando i valori coincidono, altrimenti la risorsa completa con il nuovo ETag.

Chi distribuisce i contenuti tramite una CDN deve inoltre controllare come quel livello intermedio gestisce l’ETag: alcune CDN lo rigenerano a ogni nodo, altre lo propagano invariato dal server d’origine. Se usi anche HTTP/2 o HTTP/3, il comportamento dell’ETag non cambia rispetto a HTTP/1.1: la differenza riguarda il trasporto, non la logica di validazione.

ETag o Last-Modified: quale usare

I due meccanismi rispondono alla stessa domanda, “questa risorsa è cambiata?”, ma con criteri diversi: Last-Modified si basa sulla data dell’ultima modifica, l’ETag su un identificatore di contenuto. Non sono alternativi per legge: molti server inviano entrambi, e il client usa l’ETag quando è presente perché più preciso.

Criterio di scelta tra ETag e Last-Modified
Situazione Meccanismo preferibile
Risorsa che cambia più volte nello stesso secondo ETag, perché Last-Modified ha risoluzione al secondo
Contenuto che cambia solo nei metadati, non nel testo ETag debole, per evitare invalidazioni inutili
File statici con data di salvataggio affidabile Last-Modified, per un calcolo più leggero lato server
API con controllo di concorrenza ETag, perché Last-Modified non si usa con If-Match

Errori frequenti e limiti dell’ETag

Il primo errore che vedo ricorrere è un ETag che non cambia dopo che il contenuto è stato aggiornato: il server continua a rispondere 304 Not Modified e il client resta bloccato su una versione vecchia. È un bug di configurazione, non un limite del protocollo, ma va individuato: una procedura di verifica consiste nel confrontare periodicamente il contenuto reale con quello restituito quando l’header If-None-Match viene omesso di proposito.

Il secondo limite riguarda gli ETag deboli con le richieste a intervalli di byte (byte-range): non sono affidabili per riassemblare un file scaricato a pezzi, perché la specifica garantisce solo equivalenza semantica, non identità byte per byte.

Il terzo punto è di natura diversa e riguarda la privacy: un ETag può essere usato per riconoscere lo stesso utente nel tempo, perché il browser lo rimanda a ogni richiesta come farebbe con un cookie persistente. È una condizione da conoscere se nel sito si usano script di terze parti che si affidano a questo comportamento, non una caratteristica che riguarda l’uso ordinario dell’ETag per la cache.

ETag non è sempre lo stesso termine

Chi cerca “etag” trova anche significati che non hanno nulla a che fare con l’header HTTP. In edilizia, etaG indica il rendimento globale medio stagionale di un impianto termico secondo la Legge 10/1991 italiana, mentre ETAG era la sigla delle linee guida europee per l’approvazione tecnica dei prodotti da costruzione, oggi sostituite dai documenti EAD alla base della Valutazione Tecnica Europea (ETA). Sono ambiti normativi distinti, estranei alla gestione di un sito.

ETA è anche il nome dell’autorizzazione elettronica di viaggio richiesta dal Regno Unito, e di sistemi di etichette elettroniche per il retail. In più, la sigla ETAG identifica anche enti che non hanno nulla a che fare né con l’HTTP né con l’edilizia: il consiglio estone per la ricerca (Estonian Research Council) pubblica sotto questo nome i propri bandi di finanziamento, con scadenze molto precise. Il bando 2026 per il Personal Research Funding apre il 27 febbraio e chiude il 31 marzo alle 17:00, 3. September › Events › – ETAG (2026); il CONCERT-Japan lancia il suo tredicesimo bando congiunto il 28 aprile 2026, 3. September › Events › – ETAG (2026); l’ERC Consolidator grant 2027 aprirà il 24 settembre 2026 con scadenza il 12 gennaio 2027, Past Events from 5. May (2026). Se nel tuo settore ricevi traffico o domande su questi significati, controlla sempre quale “etag” sta cercando chi ti scrive, perché la risposta cambia completamente a seconda del contesto.

Domande frequenti sull’ETag

Cos’è l’ETag in una pagina web?

È un header di risposta HTTP che identifica in modo univoco una versione di una risorsa come una pagina, un’immagine o un file JSON, usato dal browser per decidere se riutilizzare la copia in cache o richiederla di nuovo.

A cosa serve l’ETag?

Serve a validare la cache, evitando di ritrasmettere contenuti invariati, e a prevenire conflitti quando più processi modificano la stessa risorsa nello stesso momento tramite l’header If-Match.

Qual è la differenza tra ETag forte e debole?

L’ETag forte garantisce identità byte per byte tra due versioni della risorsa, quello debole (prefisso W/) garantisce solo equivalenza semantica e non è affidabile per le richieste a intervalli di byte.

Cosa significa la risposta 304 Not Modified?

Significa che la risorsa richiesta non è cambiata rispetto alla versione che il client ha già in cache, identificata dall’ETag inviato con If-None-Match; il server non rimanda il contenuto, solo l’intestazione.

Meglio usare ETag o Last-Modified?

Dipende dal caso: l’ETag è più preciso quando una risorsa può cambiare più volte nello stesso secondo o quando serve controllo di concorrenza, Last-Modified basta per file statici con data di salvataggio affidabile.

Gli ETag si possono usare per tracciare gli utenti?

Sì, è una condizione nota: un ETag può funzionare come identificatore persistente se il server lo riassegna sempre uguale allo stesso client, in modo simile a un cookie che il browser non cancella con la normale pulizia della cache.

L’ETag HTTP è la stessa cosa dell’etaG in edilizia?

No, sono due concetti distinti: l’ETag HTTP è un header del protocollo web, mentre l’etaG è il rendimento globale medio stagionale di un impianto termico definito dalla Legge 10/1991 italiana, estraneo allo sviluppo web.

Questo contenuto ti ha aiutato?

Ti è stato utile questo articolo?

Aiuta altri professionisti a crescere. Condividi questo contenuto con il tuo network.

Iscriviti alla Newsletter

Ricevi una sola mail a settimana con strategie, casi studio e consigli pratici per scalare la tua impresa. Zero spam, promesso.

Quanto fa + ?

Roberto
Varriale

In quasi 20 anni ho aiutato oltre 700 Micro Imprese a migliorare il ROI aumentando Vendite e clienti con il Traffico Organico.

Chi Sono

"Se questa risorsa ti è stata utile, valuta se seguirmi anche nei social sia l'investimento di tempo migliore che tu possa fare adesso."

Roberto Varriale