304 Not Modified to odpowiedź na warunkowe żądanie GET lub HEAD – takie, które zawiera If-None-Match lub If-Modified-Since – gdy warunek wskazuje, że kopia zapisana u klienta jest nadal aktualna. Zamiast ponownie wysyłać zasób, serwer odpowiada kodem 304, a klient korzysta z kopii z pamięci podręcznej. Oszczędza to transfer i czas.
Odpowiedź 304 nigdy nie ma treści; kończy się pustym wierszem po nagłówkach. Serwer musi wysłać te spośród nagłówków Cache-Control, Content-Location, Date, ETag, Expires i Vary, które znalazłyby się w odpowiedzi 200, aby pamięci podręczne mogły zaktualizować zapisaną odpowiedź.
Choć kod 304 należy do zakresu 3xx, nie jest przekierowaniem. Nie ma nagłówka Location, a klient pozostaje pod tym samym adresem URL. Klient, który otrzymuje 304, choć nie wysłał żądania warunkowego, komunikuje się z wadliwym serwerem.
Przykładowa odpowiedź
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 i sprawdzanie przekierowań
Kod 304 ułatwia indeksowanie. Roboty Google obsługują żądania warunkowe, a odpowiedź 304 informuje Googlebota, że treść nie zmieniła się od ostatniej wizyty robota. Oszczędza to budżet indeksowania (crawl budget) i odciąża serwer, a strona zachowuje swoje miejsce w indeksie, dlatego warto zadbać o wiarygodne nagłówki ETag lub Last-Modified, zwłaszcza w dużych witrynach.
TrueURL domyślnie nie wysyła nagłówków warunkowych, więc zobaczysz 200, a nie 304. Aby przetestować ponowną walidację, dodaj w sekcji „Własne nagłówki żądania” nagłówek If-None-Match z wartością ETag danej strony.
Typowe przyczyny i zastosowania
- Przeglądarka ponownie waliduje zapisaną w pamięci podręcznej stronę, obraz lub skrypt za pomocą
If-None-Match, aETagnadal się zgadza. - Robot indeksujący lub czytnik kanałów pobiera zasób ponownie z nagłówkiem
If-Modified-Since, a nic się nie zmieniło. - Po wdrożeniu odwiedzający widzą nieaktualną treść, bo serwer wciąż odpowiada 304: jego walidatory się nie zmieniły, np.
ETagwyliczany z rozmiaru pliku i czasu modyfikacji, które wdrożenie zachowało. Zadbaj o to, by walidatory zmieniały się zawsze, gdy zmienia się treść.