Если-нет-соответствия
Если-нет-соответствия
Заголовок HTTP-запроса If-None-Match делает запрос условным. Для методов GET и HEAD сервер вернёт запрошенный ресурс со статусом 200 только в том случае, если у него нет ETag, совпадающего с предоставленными. Для других методов запрос будет обработан только в том случае, если ETag существующего ресурса не совпадает ни с одним из перечисленных значений.
Когда условие не выполняется для методов GET и HEAD, сервер должен вернуть код состояния HTTP 304 (Не изменён). Для методов, применяющих изменения на стороне сервера, используется код состояния 412 (Условие не выполнено). Обратите внимание, что сервер, генерирующий ответ 304, ОБЯЗАН сгенерировать любые из следующих заголовков, которые были бы отправлены в ответе 200 (OK) на тот же запрос: Cache-Control, Content-Location, Date, ETag, Expires и Vary.
Сравнение сохранённого ETag использует алгоритм слабого сравнения, означающий, что два файла считаются идентичными, если их содержимое эквивалентно — они не обязаны быть идентичными байт в байт. Например, две страницы, которые отличаются датой создания в подвале, всё равно считаются идентичными.
При использовании в сочетании с If-Modified-Since, If-None-Match имеет приоритет (если сервер его поддерживает).
Существуют два распространённых случая использования:
- Для методов
GETиHEAD, чтобы обновить кэшированный объект, у которого есть связанныйETag. - Для других методов, а в частности для
PUT,If-None-Matchс значением*может использоваться для сохранения файла, о существовании которого неизвестно, гарантируя, что другое загрузка не произошла ранее, потеряв данные предыдущего put; эта проблема является вариантом проблемы потерянных обновлений.
| Тип заголовка | Заголовок запроса |
|---|---|
| Запрещённое имя заголовка | нет |
Синтаксис
If-None-Match: "<etag_value>" If-None-Match: "<etag_value>", "<etag_value>", … If-None-Match: *
Директивы
- <etag_value>
-
Идентификаторы сущностей, уникально представляющие запрошенные ресурсы. Это строка ASCII-символов, помещённая между двойными кавычками (например,
"675af34563dc-tr34") и может быть префикснойW/, чтобы указать, что должен использоваться алгоритм слабого сравнения (это бесполезно сIf-None-Match, так как он использует только этот алгоритм). *-
Звёздочка — специальное значение, представляющее любой ресурс. Они полезны только при загрузке ресурса, обычно с помощью
PUT, чтобы проверить, не был ли другой ресурс с тем же идентификатором загружен ранее.
Примеры
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-None-Match: W/"67ab43", "54ed21", "7892dd" If-None-Match: *
Спецификации
| Спецификация |
|---|
| Семантика HTTP # field.if-none-match |
Совместимость с браузерами
| Рабочий стол | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | |
If-None-Match |
Да |
12 |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
Да |
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match