Cache
Управление кэшированием
Кэширование документов является одним из наиболее интересных технологических приемов, которые применяются в World Wide Web. С одной стороны, кэширование позволяет в ряде случаев существенно сократить трафик на критических маршрутах приема/передачи данных, а с другой стороны - порождает ряд проблем, которые следует иметь в виду при управлении доступом к страницам Web-узла.
В разных версиях протоколов HTTP применяются свои директивы управления кэшированием. Cache-Control - директива протокола HTTP/1.1. Этот заголовок относится к общим заголовкам. Различают атрибуты для запроса на кэширование и атрибуты для ответа на запрос кэширования. В случае элемента разметки META нас будут интересовать только ответы на запрос кэширования. В этом случае в заголовке HTML-документа можно будет встретить:
Все перечисленные атрибуты(кроме взаимоисключающих) можно перечислять через запятую в значении атрибута content контейнера META. Из этого списка видно, что данный оператор заголовка HTTP-сообщения нацелен не только на управление простым кэшем, но на регулирование обмена данными между кэш-серверами. Самым простым способом управления кэшем является запрет на кэширование вообще. Это достигается указанием значения no-cahe:
<meta http-equiv="Cache-Control" content="no-cache">
В этом случае документ не будет кэшироваться ни proxy-сервером, ни браузером. Если указать private, то документ будет кэшироваться браузером, но не будет кэшироваться proxy-сервером.
<meta http-equiv="Cache-Control" content="private">
Последний случай интересен с точки зрения настройки на конкретного пользователя. Например, в документе есть Server Site Include, который подставляет при каждом обращении разные графические картинки. При этом, картинка должна быть привязана к моменту показа страницы, т.е. при откате по кнопке "back" должна появляться старая картинка, а не новая. Следовательно, для браузера картинка - неотъемлемая часть страницы. Если страницу закэшировать в общественном кэше, то все пользователи, которые им пользуются, будут получать всегда одно и тоже, пока кэш не обновится. Если нужно, чтобы они получали разные картинки, но при этом работали со своим локальным кэшем, то тогда нужно выставлять опцию private.
Используя оператор Cache-Control, можно определить максимальный период кэширования конкретного документа, используя max-age:
<meta http-equiv="Cache-Control" content="private,max-age=60">
В данном случае документ кэшируется браузером и не кэшируется proxy-сервером на время в 60 секунд. Такой подход может понадобиться для управления доступом к периодическим отчетам, например, к статистике доступа к серверу, которая обрабатывается не по запросу браузера, а периодически внешней программой. Простой способ управления кэшированием, который достался в наследство от протокола HTTP 1.0, определяется директивой Pragma.
далее...