If-Match
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Заголовок HTTP-запроса If-Match делает запрос условным. Для методов GET и HEAD сервер отправляет запрошенный ресурс только в том случае, если он соответствует одному из перечисленных ETags. Для PUT и других небезопасных методов он будет загружать только ресурс в этом случае.
Сравнение с хранимым ETag использует сильный алгоритм сравнения, то есть два файла считаются одинаковыми байтами только байтом. Это ослабляется, когда префикс W/ используется перед ETag.
Существует два распространённых варианта использования:
- Для методов
GETиHEAD, используемых в сочетании сRange, он может гарантировать, что запрашиваемые новые диапазоны с того же ресурса, что и предыдущий. Если он не соответствует, то возвращается ответ416(Range Not Satisfiable). - Для других методов и, в частности, для
PUT, If-Match может использоваться для предотвращения проблемы с потерянным обновлением. Он может проверить, не изменит ли изменение ресурса, которое пользователь хочет загрузить, другое изменение, которое было выполнено с момента извлечения исходного ресурса. Если запрос не может быть выполнен, возвращается ответ412(Precondition Failed).
| Header type | Request header |
|---|---|
| Forbidden header name | no |
Синтаксис
If-Match: <etag_value> If-Match: <etag_value>, <etag_value>, …
Директивы
- <etag_value>
-
Теги объектов, однозначно представляющие запрошенные ресурсы. Они представляют собой строку символов ASCII, помещённых между двойными кавычками (например, "675af34563dc-tr34") и могут быть префиксами W/, чтобы указать, что следует использовать слабый алгоритм сравнения.
*-
Звёздочка представляет собой специальное значение, представляющее любой ресурс.
Примеры
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-Match: W/"67ab43", "54ed21", "7892dd" If-Match: *
Спецификации
| Спецификация | Название |
|---|---|
| RFC 7232, раздел 3.1: If-Match | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
Совместимость с браузерами
Loading…
Смотрите также
ETagIf-Unmodified-SinceIf-Modified-SinceIf-None-Match416Range Not Satisfiable412Precondition Failed