Кэширование и тег META
Источник: http://wa.artel.by/
Михаил Дубаков
firefalcon@tut.by
Поговорим о кэшировании. Собственно, для чего оно нужно всем нам, бедным
пользователям интернета? Сокращение трафика — вот она, польза! Ну зачем нам
десять раз в день заново качать из сети первую страницу какого-нибудь поискового
каталога, когда можно аккуратненько положить ее в кэш и забыть о медленной
загрузке для этого сайта? Во-от, именно так и делают. Углубимся в проблему.
Всем известно, что разных версиях протоколов HTTP применяются свои директивы
управления кэшированием. Cache-Control — директива протокола HTTP/1.1. А
параметры у нее вот такие:
<meta http-equiv="Cache-Control" content="[no-cache], [public],
[private], [no-store], [no-transform], [must-revalidate], [proxy-revalidate],
[max-age=n]">
Все перечисленные атрибуты (кроме взаимоисключающих) можно перечислять через
запятую. Понимаю, не все ясно, сейчас кое-что поясню.
- Запрет на кэширование вообще (документ не будет кэшироваться ни
proxy-сервером, ни браузером):
<meta
http-equiv="Cache-Control" content="no-cache">
- Документ будет кэшироваться браузером, но не будет кэшироваться
proxy-сервером.
<meta http-equiv="Cache-Control"
content="private">
- Документ будет кэшироваться, даже если и не должен, вроде бы, при обычных
обстоятельствах.
<meta http-equiv="Cache-Control"
content="public">
- Документ кэшируется, но не сохраняется в архиве.
<meta
http-equiv="Cache-Control" content="no-store">
- Можно прямо сказать браузеру: "Обнови-ка мне эту страницу". (В параметре
max-age указано, на сколько секунд кэшируется документ). Может быть полезно
при использовании PHP для програмного обновления страниц.
<meta http-equiv="Cache-Control" content="max-age=3600,
must-revalidate">
- А можно сказать это только прокси-серверу.
<meta
http-equiv="Cache-Control" content="max-age=3600,
proxy-revalidate">
В наследство от протокола HTTP 1.0 нам достался очень простой способ
управления кэшированием, определяется директивой Pragma. Данная штука является
общей директивой заголовка HTTP-сообщения в HTTP/1.0, и других значений, кроме
no-cahce, не имеет:
<meta http-equiv="Pragma" content="no-cache">
В протоколе HTTP 1.1 данная директива заменена директивой Cache-Control со
значением no-cache. Большинство серверов и клиентов поддерживают эту директиву
и правильно ее отрабатывают.
Для запрета на кэширование иногда не достаточно применения директив
управления кэшированием. Так Netscape кэширует документы или их компоненты
даже при наличии директив Cache-Control и Pragma. Для того, чтобы заставить
перечитать компонент страницы (он ведь получается с сервера по
самостоятельному HTTP-запросу) можно установить директиву
Expires.

Реклама в журнале