
Глава 7. HTTP/1.1 237
7.3,2. Кэширование в НТТР/1.0
Кэширование стало предметом обсуждения уже в первых дискуссиях но
НТТР/1.0. Ко времени завершения работы над RFC 1945, в НТТР/1.0 была введе-
на минимальная поддержка кэширования. Потребность в кэширование возникла
из-за проблем с задержками, связанными с низкоскоростными соединениями и
большим количеством запросов па популярные ресурсы. Если ресурс не изменялся
между запросами, то загрузка того же самого ресурса приводила к донолнителыюй
и непроизводительной нагрузке на сеть и сервер.
НТТР/1.0 обеспечивал управление кэшированием следующими тремя способами:
• Директива запроса (Pragma: no-cache).
• Модификатор запроса GET (If-Modifled-Since).
• Заголовок ответа (Expires).
В НТТР/1.0 можно было использовать директиву запроса Pragma: no-cache,
посредством которой клиенты могли запрашивать получение ответа непосредст-
венно от сервера-источника. Директива Pragma могла быть проигнорирована, но,
как правило, получатели ее выполняли. Клиенты имели возможность обойти лю-
бые кэши и получить текущую копию данного ресурса от сервера-источника.
В НТТР/1.0 определен также заголовок содержимого Expires, чтобы дать воз-
можность серверам-источникам указывать срок годности, до достижения которого
данный ресурс можно было хранить в кэше и считать актуалынлм.
Еще одним механизмом кэширования в НТТР/1.0 являлся ус./ювный запрос GET
с использованием модификатора запроса If-Modified-Since (обсуждался в главе 6,
в разделе 6.2.3). Если копия данного ответа, хранящаяся в кэи1е но-нрежнему акту-
альна, то сервер возвращает в качестве ответа 304 Not Modified без тела ответа. От-
правитель запроса вместо этого мог использовать копию ответа из кэша. Если время
последней модификации ресурса было более поздним но сравнению с указанным
в запросе, сервер возвращает соответствующий код состояния (чаи1е всего 200 ОК)
вместе с полным телом ответа. Заметьте, что ответы, возвращенные с кодами состоя-
ний, отличными от 200 ОК, могут также сохраняться в кэше. Предположим, что про-
кси-сервер послал запрос и получил ответ 304 Not Modified. Прокси-сервер вернет
клиенту или ответ из своего кэша, или 304 Not Modified, в зависимости от того был
ли в переданном клиентом запросе заголовок If-Modified-Since.
Некоторые из реализаций НТТР/1.0 использовали заголовок Expires некор-
ректно, задавая значения, которые тут же приводили к истечению срока годности
этого ресурса (препятствуя, таким образом, его сохранению в K3uie). Это известно
как аннулирование кэша (cache busting). В решении сервера-источника аннулиро-
вать кэш есть и плюсы и минусы. Если у сервера-источника есть повод предпола-
гать,
что кэш, возможно, возвращает устаревшие ресурсы, сервер-источник мог бы
попытаться убедиться, что ресурс не сохраняется в кэше. Попадание в кэш (cache
hit) (успешное обнаружение запрашиваемого ресурса при обраще]Н4и к кэшу) ре-
зультата запроса клиента к прокси-серверу, осуществляющему кэширование, будет
«невидимо» для сервера-источника. Сервер-источник может генерировать страни-
цы,
которые включают рекламу в виде отдельных GIF-изображений. С целью уве-
личения дохода от рекламы, серверу может потребоваться сделать так, чтобы рек-
лама передавалась клиентам при каждом посещении ими страницы. Сервер-источ-
ник окажется не способным выяснить, что реклама, размещенная на его страницах,
была действительно доставлена пользователям. Если же ресурс не был сохранен
в кэше, то запрос клиентом страницы приведет к тому, что GIF-изображения с рек-