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

14.26. If-None-Match

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

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

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

Если бы любой из тэгов объекта соответствует тэгу объекта объекта, который был бы возвращен в ответ на подобный запрос GET (без заголовка If-None-Match) на том ресурсе, или если "*" дан, и любой текущий объект существует для того ресурса, то сервер не ДОЛЖЕН выполнить запрошенный метод. Вместо этого если бы методом запроса был GET или HEAD, то сервер ДОЛЖЕН ответить 304 (Not Modified) ответ, включая связанные с кэшем поля заголовка объекта (особенно ETag) одного из объектов, которые соответствовали. Для всех других методов запроса сервер ДОЛЖЕН ответить состоянием 412 (Precondition Failed).

См. раздел 13.3.3 для правил о том, как определить, отмечают ли два объекта соответствие. Слабая функция сравнения может только использоваться с запросами HEAD или GET.

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

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

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

Эта возможность может быть полезной в предотвращении гонок между операциями PUT.

Примеры:

If-None-Match: "xyzzy"
If-None-Match: W/"xyzzy"
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
If-None-Match: *

Страница 120 из 160

2007 - 2022 © Русские переводы RFC, IETF, ISOC.