RFC: 2068
Оригинал: Hypertext Transfer Protocol - HTTP/1.1
Другие версии: RFC 2616
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Алексей Симонов

14.25. If-Match

Поле заголовка запроса If-Match используется с методом, чтобы сделать его условным выражением. Клиент, у которого есть один или более объектов, ранее полученных из ресурса, может проверить, что один из тех объектов является текущим, включая список их связанных тэгов объекта в поле заголовка If-Match. Цель этой возможности состоит в том, чтобы позволить эффективное обновление кэшируемой информации с минимальным количеством операционных издержек. Он также используется, при модифицировании запросов, предотвратить небрежную модификацию неправильной версии ресурса.

Как особый случай, значение "*" соответствует любому текущему объекту ресурса.

If-Match = "If-Match" ":" ( "*" | 1#entity-tag )

Если бы любой из тэгов объекта соответствует тэгу объекта объекта, который был бы возвращен в ответ на подобный запрос GET (без заголовка If-Match) на том ресурсе, или если "*" дан, и любой текущий объект существует для того ресурса, то сервер МОЖЕТ выполнить запрошенный метод, как будто поле заголовка If-Match не существовало.

Сервер ДОЛЖЕН использовать сильную функцию сравнения (см. раздел 3.11), чтобы сравнить тэгы объекта в If-Match.

Если ни один из объекта не отмечает соответствие, или если "*" дан, и никакой текущий объект не существует, сервер не ДОЛЖЕН выполнить запрошенный метод, и ДОЛЖЕН возвратить 412 (Precondition Failed) ответ. Это поведение является самым полезным, когда клиент хочет предотвратить метод модифицирования, например, PUT, от изменения ресурса, который изменился, так как последний клиент отыскал его.

Если бы запрос, без поля заголовка If-Match, закончился бы чем-нибудь кроме 2xx состояние, то заголовок If-Match ДОЛЖЕН быть проигнорирован.

Значение "If-Match: *" то, что метод SHOULD выполнен, если представление, выбранное сервером происхождения (или кэшем, возможно, используя механизм Vary, см. раздел 14.43), существует, и не ДОЛЖНО быть выполнено, если представление не существует.

Запрос должен был обновить ресурс (например, PUT) МОЖЕТ включить поле заголовка If-Match, чтобы сообщить об этом метод MUST запроса НЕ быть примененным, если объект, соответствующий значению If-Match (отдельный тэг объекта), больше не является представлением того ресурса. Это позволяет пользователю указывать, что они не желают, чтобы запрос был успешен, если ресурс был изменен без их знания.

Примеры:

If-Match: "xyzzy"
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-Match: *
2007 - 2017 © Русские переводы RFC, IETF, ISOC.