
Глава 11. Кэширование 393
11.3.2.
Соображения, определяемые Web-содержанием
у кэша может быть набор своих собственных правил, не связанных с требова-
ниями протокола, для решения вопроса о необходимости кэширования ответа.
Другими словами, возможность кэширования ответа не означает, что он будет обя-
зательно кэширован. Сообщение может оказаться слишком большим, динамически
генерируемым или включать в себя cookies, что может оказать влияние на кэширо-
вание. Политика кэширования может руководствоваться другими соображениями,
отличными от требований протокола, например, атрибутами сообщений. Напри-
мер,
частота, с которой кэш проверяет актуальность ресурсов на исходном сервере,
может диктоваться политикой продолжительности кэширования ресурсов. С дру-
гой стороны, если обладателю кэша платят за объем данных, доставляемых пользо-
вателям, то он может принять решение игнорировать дату последней модификации
и посылать полный ответ вместо передачи 304 Not Modified. Совместно используе-
мый кэш может не кэшировать ответы на запросы, содержащие внедренную в них
личную информацию (например, cookies). Страницы ASP и запросы на документы,
требующие аутентификации, являются, вероятно, не лучшими кандидатами на кэ-
ширование.
Можно сократить коммерческую стоимость передач, игнорируя некоторые огра-
ничения, связанные с кэшированием. Кэши могут сохранять ресурсы, которые не
предполагалось кэшировать, например, в случае использования Cache-Control:
private. Цели пользователя — сократить время ожидания ответа, а провайдера —
сократить объем пересылаемых данных, могут не совпадать с побудительными мо-
тивами компании, осуществляющей кэширование, приводя к игнорированию огра-
ничений протокола.
Кэши могут также учитывать расходы но хранению данных и не кэшировать
большие ресурсы, даже если нет никаких других препятствий для их кэширования.
Если сообщение слишком большое, то, возможно, что многие другие объекты будут
вытеснены из кэша. В терминах времени задержки ответа, стоимость загрузки
большого числа небольших ресурсов с соответствующих исходных серверов может
быть выше, чем стоимость получения их из кэша. Таким образом, кэш может отка-
заться от кэширования слишком больших ответов. С другой стороны, большие кэ-
шируемые ответы, которые неоднократно требуются клиентам, находящимся за кэ-
шем, могут давать значительную экономию трафика. Например, предположим, что
новая версия популярной программы появилась на Web-сайте. Такой ресурс имеет
и большой объем, и достаточно высокую частоту запросов. Его кэширование дает
значительную выгоду. Частично причина заключается еще и в том, что некоторые
провайдеры должны платить за объем загружаемых ими да1Н1ых, и они предпочи-
тают использовать кэши, чтобы не загружать ресурсы многократно.
Многие кэши воздерживаются от сохранения ответов, сформированных сцена-
риями, предполагая малую вероятность того, что те же значения параметров запро-
сов будут повторно использованы. Решение о том, что ответ был сгенерирован как
результат вызова сценария, основано на эвристике. Основное предположение,
влияющее на решение о кэшировании ответа, заключается в том, что в дальнейшем
будет генерироваться один и тот же ответ, а запрос на такой ответ может поступить
в ближайшее время. По сравнению с запросами на статические ресурсы, которые
меняются не слишком часто, каждое выполнение сценария с высокой вероятно-
стью приводит к отличному от предыдущего ответа результату. Однако присутст-
вие в динамическом ответе такой информации о возможности кэширования, как
заголовки Expires и Etag, может указать на целесообразность кэширования ресур-