Статус: 304
304 Не изменено
Код состояния HTTP 304 Not Modified ответа перенаправления указывает, что повторно передавать запрошенные ресурсы не требуется.
Этот код ответа отправляется, когда запрос является условным запросом GET или HEAD с заголовком If-None-Match или If-Modified-Since, а условие вычисляется как «ложь». Он подтверждает, что ресурс, кэшированный клиентом, всё ещё действителен и что сервер отправил бы ответ 200 OK с ресурсом, если бы условие вычислялось как «истина». Подробнее см. в разделе Кэширование HTTP.
Ответ не должен содержать тело и должен включать заголовки, которые были бы отправлены в эквивалентном ответе 200, например:
Примечание: Многие панели сети в инструментах разработчика браузеров создают лишние запросы, приводящие к ответам 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.
См. также
© 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