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

Заголовок If-Range

Если клиент имеет частичную копию объекта в своем кэше и хочет иметь полную свежую копию объекта, он может использовать заголовок запроса Range с условным GET (используя If-Unmodified-Since и/или If-Match.) Однако если условие не выполняется изза того, что объект был модифицирован, клиенту следует послать второй запрос, чтобы получить все текущее содержимое тела объекта.

Заголовок If-Range позволяет клиенту заблокировать второй запрос. По существу это означает, что "если объект не изменился, следует посылать мне часть, которой у меня нет, в противном случае пришлите мне всю новую версию объекта".

If-Range = "If-Range" ":" ( entitytag | HTTPdate )

Если клиент не имеет метки объекта, но имеет дату Last-Modified, он может использовать эту дату в заголовке If-Range. Сервер может отличить корректную дату HTTP от любой формы метки объекта, рассмотрев не более двух символов. Заголовок If-Range следует использовать только совместно с заголовком Range, и его следует игнорировать, если запрос не содержит в себе этот заголовок или если сервер не поддерживает операции с фрагментами.

Если метка объекта, представленная в заголовке If-Range, соответствует текущей метке, то сервер должен обеспечить специфицированный фрагмент объекта, применяя отклик 206 (Partial content). Если метка объекта не подходит, сервер должен прислать полный объект со статусным кодом 200 (OK).

Поле If-Unmodified-Since

Поле заголовка запроса If-Unmodified-Since применяется для того, чтобы формировать условные методы. Если запрошенный ресурс не был модифицирован с момента, указанного в поле, сервер должен произвести запрошенную операцию так, как если бы заголовок If-Unmodified-Since отсутствовал.

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

If-Unmodified-Since = "If-Unmodified-Since" ":" HTTPdate

Примером поля может служить:

If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Если запрос завершается чем­то отличным от статусного кода 2xx (т.е., без заголовка If-Unmodified-Since ), заголовок If-Unmodified-Since следует игнорировать. Если специфицированная дата некорректна, заголовок также игнорируется.

Поле Last-Modified

Поле заголовка объекта Last-Modified указывает на дату и время, при которых, по мнению исходного сервера, данный объект был модифицирован.

Last-Modified = "Last-Modified" ":" HTTPdate

Пример его использования

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

Точное значение этого заголовка зависит от реализации исходного сервера и природы ресурса. Для файлов это может быть дата последней модификации файловой системы. Для объектов с динамическими встроенными частями — время последней модификации одной из встроенных компонент. Для шлюзов баз данных — метка последней модификации рекорда. Для виртуальных объектов — время последнего изменения внутреннего состояния.

Исходный сервер не должен посылать дату Last-Modified, более позднюю, чем время формирования сообщения сервера. В таких случаях, когда последняя модификация объекта указывает на некоторое время в будущем, сервер должен заменить дату на время формирования сообщения.

Исходный сервер должен получить значение Last-Modified объекта как можно ближе к моменту генерации значения Dateотклика. Это позволяет получателю выполнить точную оценку времени модификации объекта, в особенности, если объект был изменен буквально накануне формирования отклика.

Серверы HTTP/1.1 должны посылать поле Last-Modified всякий раз, когда это возможно.