Spec-Zone.ru › HTTP

Статус: 304

304 Не изменено

Код состояния HTTP 304 Not Modified ответа перенаправления указывает, что повторно передавать запрошенные ресурсы не требуется.

Этот код ответа отправляется, когда запрос является условным запросом GET или HEAD с заголовком If-None-Match или If-Modified-Since, а условие вычисляется как «ложь». Он подтверждает, что ресурс, кэшированный клиентом, всё ещё действителен и что сервер отправил бы ответ 200 OK с ресурсом, если бы условие вычислялось как «истина». Подробнее см. в разделе Кэширование HTTP.

Ответ не должен содержать тело и должен включать заголовки, которые были бы отправлены в эквивалентном ответе 200, например:

  • Cache-Control
  • Content-Location
  • Date
  • ETag
  • Expires
  • Vary

Примечание: Многие панели сети в инструментах разработчика браузеров создают лишние запросы, приводящие к ответам 304, чтобы разработчики могли видеть доступ к локальному кэшу.

Статус

304 Not Modified

Примеры

>

Ответ 304 на условные запросы

В примерах ниже показаны запросы GET, выполняемые с помощью curl и условных заголовков запроса. Флаг --http1.1 используется, чтобы для удобства чтения принудительно задать протокол HTTP/1.1.

В первом запросе используется условие If-Modified-Since с датой в будущем — 21 ноября 2050 года. Оно должно вычисляться как false, поскольку ресурс не мог быть обновлён после момента времени, который ещё не наступил:

curl --http1.1 -I --header 'If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT' \
 https://developer.mozilla.org/en-US/

В результате будет отправлен следующий HTTP-запрос:

GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT

Если бы ресурс был обновлён после временной метки в заголовке If-Modified-Since, ответом стала бы версия ресурса на текущий момент с кодом 200 OK. Вместо этого мы получаем ответ 304 с заголовками ETag, Age и Expires, которые сообщают, что наша кэшированная версия ресурса всё ещё актуальна:

HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 09:52:35 GMT
Expires: Wed, 28 Aug 2024 10:01:53 GMT
Age: 3279
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear

Теперь выполните ещё одну команду curl, используя значение etag из предыдущего ответа вместе с условием If-None-Match (поскольку этот etag является текущей версией ресурса на сервере, мы ожидаем получить ответ 304 Not Modified):

curl --http1.1 -I --header 'If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"' \
 https://developer.mozilla.org/en-US/

В результате будет отправлен следующий HTTP-запрос:

GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"

Поскольку значение etag совпадает на момент выполнения запроса, тег сущности не удовлетворяет условию, и возвращается ответ 304:

HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 10:36:35 GMT
Expires: Wed, 28 Aug 2024 11:02:17 GMT
Age: 662
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear

Спецификации

Спецификация
Неизвестная спецификация>
# status.304>

Примечания о совместимости

Поведение браузеров различается, если этот ответ по ошибке содержит тело при постоянных соединениях. Подробнее см. в разделе 204 No Content.

См. также

  • Перенаправления в HTTP
  • Коды состояния ответов HTTP
  • Условные запросы HTTP
  • If-Modified-Since
  • If-None-Match

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/304

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API