304 Not Modified risponde a una richiesta GET o HEAD condizionale, cioè con If-None-Match o If-Modified-Since, quando la condizione mostra che la copia memorizzata dal client è ancora aggiornata. Invece di inviare di nuovo la risorsa, il server risponde 304 e il client usa la propria copia in cache. Si risparmiano così banda e tempo.
Una risposta 304 non ha mai un corpo: termina con la riga vuota dopo le intestazioni. Il server deve inviare, tra le intestazioni Cache-Control, Content-Location, Date, ETag, Expires e Vary, quelle che sarebbero state presenti in una risposta 200, così che le cache possano aggiornare la risposta memorizzata.
Anche se appartiene alla classe 3xx, il 304 non è un reindirizzamento. Non c’è alcuna Location e il client resta sullo stesso URL. Un client che riceve un 304 senza aver inviato una richiesta condizionale sta comunicando con un server difettoso.
Esempio di risposta
HTTP/1.1 304 Not Modified
Date: Fri, 06 Nov 2026 10:15:32 GMT
ETag: "5f2b-1a3c"
Last-Modified: Wed, 28 Oct 2026 08:02:11 GMT
Cache-Control: public, max-age=600
Vary: Accept-Encoding SEO e verifica dei redirect
Il 304 aiuta la scansione. I crawler di Google supportano le richieste condizionali, e un 304 comunica a Googlebot che il contenuto non è cambiato dall’ultima scansione. Si risparmiano così capacità di scansione e carico sul server, mentre la pagina resta nell’indice: per questo conviene avere intestazioni ETag o Last-Modified affidabili, soprattutto sui siti di grandi dimensioni.
TrueURL non invia intestazioni condizionali per impostazione predefinita, quindi vedrai 200 e non 304. Per testare la riconvalida, aggiungi in Intestazioni di richiesta personalizzate un’intestazione If-None-Match con l’ETag della pagina.
Cause comuni e casi d’uso
- Un browser riconvalida una pagina, un’immagine o uno script in cache con
If-None-Match, e l’ETagcorrisponde ancora. - Un crawler o un lettore di feed richiede di nuovo la risorsa con
If-Modified-Sincee non è cambiato nulla. - Dopo un deploy i visitatori vedono contenuti non aggiornati perché il server continua a rispondere 304: i suoi validatori non sono cambiati, per esempio un
ETagbasato su dimensione e data di modifica del file che il deploy ha lasciato invariate. Assicurati che i validatori cambino ogni volta che cambia il contenuto.