Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сетевые протоколы в инфокоммуникациях (ПЗ).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3.51 Mб
Скачать

Поле If-Match

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

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

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

Сервер должен использовать функцию сильного сравнения для сопоставления меток объекта в If-Match.

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

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

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

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

If-Match: "xyzzy" If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" If-Match: *

Поле If-None-Match

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

Значение "*" соответствует любому текущему объекту ресурса.

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

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

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

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

Если запрос без поля заголовка If-None-Match, даст результат, отличный от статусного кода 2xx, тогда заголовок If-None-Match должен игнорироваться.

"If-None-Match: *" означает, что метод не должен реализовываться, если представление, выбранное исходным сервером (или кэшем, возможно использующим механизм Vary ), существует, и должен быть реализован, если представления не существует. Эта функция может быть полезной для предотвращения конкуренции между операциями 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: *