HTTPQUERY
Русский

If-None-Match

Применение

Заголовок If-None-Match обеспечивает повторную валидацию кэша на основе тегов сущностей. Клиент включает одно или несколько значений ETag, полученных в предыдущем ответе. Если какой-либо из перечисленных ETag совпадает с текущим ресурсом, сервер возвращает ответ 304 Not Modified без тела, и клиент использует свою кэшированную копию. Если ни один ETag не совпадает, сервер отправляет обычный ответ 200 с обновлённым содержимым.

Для безопасных методов, таких как GET и HEAD, это основной механизм повторной валидации кэша. Для небезопасных методов, таких как PUT, If-None-Match с подстановочным знаком * предотвращает перезапись существующего ресурса, избавляя от проблемы потерянного обновления. При обнаружении совпадения в небезопасном запросе сервер возвращает 412 Precondition Failed.

Когда в одном запросе присутствуют и If-None-Match, и If-Modified-Since, приоритет имеет If-None-Match. Сравнение по ETag надёжнее сравнения по дате, поскольку теги сущностей — это непрозрачные идентификаторы, привязанные к точному содержимому, тогда как временные метки имеют разрешение в одну секунду и подвержены расхождению часов.

Когда сервер возвращает 304, ответ включает заголовки из исходного успешного ответа: Cache-Control, Content-Location, Date, ETag, Expires и Vary.

Примечание

Googlebot отправляет If-None-Match в запросах сканирования, если предыдущий ответ содержал ETag. Серверы, возвращающие 304 для неизменившегося содержимого, экономят время обработки и ресурсы, косвенно повышая эффективность сканирования. Серверы также вправе возвращать 304 упреждающе для любого запроса Googlebot, когда содержимое не изменилось, независимо от того, содержит ли запрос условные заголовки. Установка поля max-age в заголовке ответа Cache-Control равным ожидаемому числу секунд, в течение которых содержимое остаётся неизменным, помогает сканерам определить, когда повторно обходить URL.

Значение ETag

Одно или несколько значений ETag, каждое из которых заключено в двойные кавычки. Несколько значений разделяются запятыми. Допустимы как строгие, так и слабые ETag (с префиксом W/).

* (подстановочный знак)

Подстановочный знак * соответствует любой текущей сущности. Используется с PUT, чтобы не создавать ресурс, если он уже существует.

Пример

Клиент выполняет повторную валидацию кэшированного ресурса с помощью одного ETag. Сервер возвращает 304, если ресурс по-прежнему соответствует указанному тегу сущности.

If-None-Match: "abc123"

Клиент, хранящий несколько кэшированных версий, отправляет все известные ему ETag. Сервер сверяет каждый из них с текущим ресурсом. Если совпадает хотя бы один, сервер возвращает 304.

If-None-Match: "abc123", "def456"

Сравнение слабого ETag. Слабые валидаторы обозначают смысловую эквивалентность, а не побайтовую идентичность. Префикс W/ указывает на слабое сравнение.

If-None-Match: W/"v2.6"

Запрос PUT с подстановочным знаком для предотвращения перезаписи. Сервер возвращает 412 Precondition Failed, если по целевому URL ресурс уже существует.

PUT /api/resource HTTP/1.1
If-None-Match: *

Примечание

За помощью по SEO и кэшированию обращайтесь к бывшим SEO-консультантам Google — Search Brothers.