Кэширование в НТТР/1.0

Кэширование стало предметом обсуждения уже в первых дискуссиях по НТТР/1.0. Ко времени завершения работы пад RFC 1945, в НТТР/1.0 была введена минимальная поддержка кэширования. Потребность в кэширование возникла из-за проблем с задержками, связанными с пизкоскоростпыми соединениями и большим количеством запросов на популярные ресурсы. Если ресурс не изменялся между запросами, то загрузка того же самого ресурса приводила к дополнительной и непроизводительной нагрузке на сеть и сервер.

НТТР/1.0 обеспечивал управление кэшированием следующими тремя способами:

•   Директива запроса (Pragma: no-cache).

•    Модификатор запроса GET (If-Modified-Since).

•   Заголовок ответа (Expires).

В НТТР/1.0 можно было использовать директиву запроса Pragma: no-cache, посредством которой клиенты могли запрашивать получение ответа непосредственно от сервера-источника. Директива Pragma могла быть проигнорирована, по, как правило, получатели ее выполняли. Клиенты имели возможность обойти любые кэши и получить текущую копию дапного ресурса от сервера-источпика.

В НТТР/1.0 определен также заголовок содержимого Expires, чтобы дать возможность серверам-источпикам указывать срок годности, до достижения которого данный ресурс можно было хранить в кэше и считать актуальным.

Еще одним механизмом кэширования в НТТР/1.0 являлся условный запрос GET с использованием модификатора запроса If-Modified-Since (обсуждался в главе 6, в разделе 6.2.3). Если копия данного ответа, хранящаяся в кэше по-прежнему актуальна, то сервер возвращает в качестве ответа 304 Not Modified без тела ответа. Отправитель запроса вместо этого мог использовать копию ответа из кэша. Если время последней модификации ресурса было более поздним по сравнению с указанным в запросе, сервер возвращает соответствующий код состояния (чаще всего 200 OK) вместе с полным телом ответа. Заметьте, что ответы, возвращенные с кодами состояний, отличными от 200 OK, могут также сохраняться в кэше. Предположим, что про- кси-сервер послал запрос и получил ответ 304 Not Modified. Прокси-сервер вернет клиенту или ответ из своего кэша, или 304 Not Modified, в зависимости от того был ли в переданном клиентом запросе заголовок If-Modified-Since.

Некоторые из реализаций НТТР/1.0 использовали заголовок Expires некорректно, задавая значения, которые тут же приводили к истечению срока годности этого ресурса (препятствуя, таким образом, его сохранению в кэше). Это известно как аннулирование кэша (cache busting). В решении сервера-источпика аннулировать кэш есть и плюсы и минусы. Если у сервера-источпика есть повод предполагать, что кэш, возможно, возвращает устаревшие ресурсы, сервер-источник мог бы попытаться убедиться, что ресурс не сохраняется в кэше. Попадание в кэш (cache hit) (успешное обнаружение запрашиваемого ресурса при обращении к кэшу) результата запроса клиента к прокси-серверу, осуществляющему кэширование, будет «невидимо» для сервера-источника. Сервер-источник может генерировать страницы, которые включают рекламу в виде отдельных GIF-изображений. С целью увеличения дохода от рекламы, серверу может потребоваться сделать так, чтобы реклама передавалась клиентам при каждом посещении ими страницы. Сервер-источ- ник окажется не способным выяснить, что реклама, размещенная на его страницах, была действительно доставлена пользователям. Если же ресурс не был сохранен в кэше, то запрос клиентом страницы приведет к тому, что GIF-изображения с рекламой будут загружаться с сервера-источпика, увеличивая, таким образом, число показов рекламы сервером-источником.

Заголовок Last-Modified обычно означает, что данный ресурс не был сгенерирован динамически, и некоторые кэши, реализующие НТТР/1.0, использовали это как критерий при принятии решения о том, можно ли данный ответ размещать u кэше. Однако такой логический вывод не всегда справедлив. Некоторые динамически генерируемые отклики могут повторяться каждый раз, когда они генерируются. CGI-сценарий, который генерирует я-ую цифру числа я, геперируег каждый раз один и тот же результат. Другими словами, в зависимости от запроса и его параметров, динамически генерируемые отклики также могут размещаться в кэше. Но ирокси-сервер, осуществляющий кэширование, может оказаться не в состоянии оцепить характер выполняемого сценария.

Все сравнения интервалов времени в НТТР/1.0 привязывались к отсчету абсолютного времени. Как мы увидим в дальнейшем, это оказалось недостатком, потребовавшим доработки в НТТР/1.1.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100