HTTP 304 Not Modified

Валидатор кэша: с момента последнего посещения ничего не изменилось, продолжайте использовать уже имеющуюся копию.

Что означает HTTP 304

HTTP 304 Not Modified — это ответ на условный запрос. Клиент говорит «у меня есть копия от этой даты» (If-Modified-Since) или «с таким отпечатком» (If-None-Match), а сервер подтверждает, что копия по-прежнему актуальна, отвечая 304 без тела.

Этот механизм — ревалидация кэша — делает повторные загрузки страниц быстрыми: браузер заново скачивает только то, что изменилось, а всё остальное обходится одним небольшим round-trip'ом.

Частые причины ответов 304

  • Браузер ревалидировал кэшированную страницу, скрипт или изображение, и они не изменились.
  • Edge-узел CDN ревалидировал сохранённый объект относительно источника (origin).
  • Клиент API использовал ETag'и для дешёвого опроса ресурса.

Хорошие практики для разработчиков

  • Отдавайте стабильные заголовки ETag или Last-Modified, чтобы клиенты вообще могли проводить ревалидацию.
  • Не включайте тело ответа в 304 — у клиента оно уже точно есть.
  • Остерегайтесь ETag'ов, меняющихся при каждом ответе (например, из-за серверов с балансировкой нагрузки и хешами для каждого узла): они незаметно отключают ревалидацию.

Пример ответа

GET /styles.css HTTP/1.1
If-None-Match: "abc123"

HTTP/1.1 304 Not Modified
ETag: "abc123"
Cache-Control: max-age=3600

Влияние на SEO

Ответы 304 полезны для производительности SEO: Googlebot активно использует условные запросы, и корректная ревалидация позволяет ему обходить больше страниц вашего сайта при том же бюджете. Сломанные валидаторы вынуждают полностью перезагружать контент при каждом обходе.

Частые вопросы

Является ли ответ 304 ошибкой?

Нет — это сигнал успеха, означающий, что ваша кэшированная копия всё ещё актуальна. Браузеры обрабатывают его прозрачно.

Что вызывает ответ 304?

Запрос с заголовками If-None-Match или If-Modified-Since, значения которых по-прежнему совпадают с текущим ресурсом.

Почему в DevTools я вижу 304 вместо 200?

У браузера была кэшированная копия, и он её ревалидировал. Статус показывает, что сервер подтвердил кэш вместо повторной отправки файла.