Cosa significa
La copia in cache del client è ancora valida, quindi il server non invia il corpo. Risponde a una richiesta condizionale con If-None-Match o If-Modified-Since.
Cause comuni
- L'ETag in If-None-Match corrisponde alla versione attuale
- La risorsa non è cambiata da If-Modified-Since
- Un browser che riconvalida una risorsa in cache
Come risolvere
Lato client o visitatore
Usa il corpo in cache. Se il contenuto sembra vecchio, il validatore potrebbe essere sbagliato; forza il ricaricamento o controlla la generazione degli ETag.
Lato gestore del sito o dell’API
Genera ETag stabili (identici su tutti i server dietro un load balancer) e invia gli stessi header di cache che invieresti con 200.
Risposta di esempio
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 Specifica
Domande frequenti
› Il 304 è un errore?
No. Fa risparmiare banda dicendo al client che la sua cache è aggiornata.
› Perché gli utenti vedono file vecchi dopo un deploy?
Gli header di cache permettono copie obsolete. Usa nomi di file con impronta per le risorse e un max-age breve con riconvalida per l'HTML.