Get с условием

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

Несмотря на то что кэширование способно снизить задержку на доставку объектов, необходимых для открытия документов, оно порождает новую проблему: содержимое кэшируемого объекта постоянно устаревает. Объект, находящийся на web-сервере, может быть изменен, после чего он перестает соответствовать уже загруженному объекту. К счастью, протокол HTTP располагает средством, позволяющим при необходимости обновлять кэшированные объекты; это средство представляет собой метод GET с условием. В HTTP существует так называемый условный GET-запрос, который использует метод GET и строку If-Modified-Since: заголовка.

Для того чтобы продемонстрировать описанный механизм в действии, рассмотрим пример. Пусть сначала браузер запрашивает некэшированный объект с web-сервера:

GET /fruit/kiwi.gif HTTP/1.0
User-agent: Mozilla/4.0

Затем происходит передача ответного сообщения сервера с требуемым объектом:

НТТР/1.0 200 ОК
Date: Wed, 12 Aug 1998 15:39:29
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 09:23:24
Content-Type: image/gif

(data data data data data …)

Клиент отображает объект на экране и сохраняет его в своем локальном кэше. Кроме того, вместе с объектом сохраняется время его последнего изменения. Пусть через неделю пользователь снова соединяется с тем же сервером, при этом объект остается в кэше. Поскольку за прошедшую неделю объект на сервере мог быть изменен, браузер формирует запрос, отправляемый методом GET с условием:

GET /fruit/kiwi.gif HTTP/1.0
User-agent: Mozilla/4.0
If-modified-since: Mon. 22 Jun 1998 09:23:24

Обратите внимание на то, что содержимое строки If-modified-since: совпадает с содержимым строки Last-Modified: первого запроса. Запрос является указанием серверу осуществить пересылку объекта в случае, если с момента предыдущей пересылки последний был изменен. Если изменения не произошло, будет получен следующий ответ:

HTTP/1.0 304 Not
Modified Date: Wed. 19 Aug 1998 15:39:29
Server: Apache/1.3.0 (Unix)
(пустое тело)

Как мы видим, несмотря на отсутствие изменений объекта, сервер отсылает клиенту ответ, однако тело сообщения остается пустым. Новая посылка идентичного объекта привела бы к бесполезной трате временных и сетевых ресурсов, особенно ощутимой при большом размере объекта. Обратите внимание на то, что в ответе содержится код состояния 304 Not Modified, означающий, что клиент может использовать кэшированную версию объекта.

Данная статья "Get с условием" размещена на сайте Компьютерные сети и многоуровневая архитектура интернета (conlex.kz) в ознакомительных целях.

Уточнения, корректировки и обсуждения статьи "Get с условием" - под данным текстом, в комментариях.

Ответственность, за все изменения, внесённые в систему по советам данной статьи, Вы берёте на себя.

Копирование статьи "Get с условием", без указания ссылки на сайт первоисточника Компьютерные сети и многоуровневая архитектура интернета (conlex.kz), строго запрещено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *