304 Not Modified — ответ на условный запрос GET или HEAD, то есть запрос с заголовком If-None-Match или If-Modified-Since, когда условие показывает, что сохраненная у клиента копия все еще актуальна. Вместо того чтобы снова передавать ресурс, сервер отвечает 304, и клиент использует копию из кэша. Это экономит трафик и время.
У ответа 304 никогда не бывает тела: он заканчивается пустой строкой после заголовков. Сервер должен отправить те из заголовков Cache-Control, Content-Location, Date, ETag, Expires и Vary, которые были бы в ответе 200, чтобы кэши могли обновить сохраненный ответ.
Хотя 304 относится к классу 3xx, это не редирект. Заголовка Location нет, и клиент остается на том же URL. Если клиент получил 304, хотя не отправлял условный запрос, значит, сервер работает неправильно.
Пример ответа
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 и проверка редиректов
Код 304 помогает сканированию. Поисковые роботы Google поддерживают условные запросы, и 304 сообщает Googlebot, что содержимое не изменилось с прошлого сканирования. Это экономит краулинговый бюджет и снижает нагрузку на сервер, а страница сохраняет свое место в индексе, поэтому надежные заголовки ETag или Last-Modified стоит настроить, особенно на крупных сайтах.
TrueURL по умолчанию не отправляет условные заголовки, поэтому вы увидите 200, а не 304. Чтобы проверить повторную валидацию, добавьте в разделе «Пользовательские заголовки запроса» заголовок If-None-Match со значением ETag страницы.
Типичные причины и сценарии использования
- Браузер повторно проверяет закэшированную страницу, изображение или скрипт с помощью
If-None-Match, иETagпо-прежнему совпадает. - Поисковый робот или RSS-ридер повторно запрашивает ресурс с
If-Modified-Since, а изменений нет. - После деплоя посетители видят устаревший контент, потому что сервер продолжает отвечать 304: его валидаторы не изменились — например,
ETagстроится из размера файла и времени изменения, а деплой их сохранил. Убедитесь, что валидаторы меняются при каждом изменении содержимого.