Сколько раз писано и переписано о тэге <META>. Казалось бы,
все! Хватит! Закрыли тему! Но нет! Ведь не все сказали! Вернее, кое-где все, но
это попробуй найди еще. Потыкайся во всякие Rambler'ы и Яndex'ы...
Итак, поговорим о кэшировании. Собственно, для чего оно нужно всем
нам, бедным пользователям интернета, как среды обитания. Сокращение трафика -
вот она, польза! Ну зачем нам десять раз на день заново качать из сети первую
страницу какого-нибудь каталога, когда можно аккуратненько положить ее в кэш и
забыть о медленной загрузке для этого сайта? Во-от, именно так и делают.
Углубимся в проблему.
Всем известно, что разных версиях протоколов 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]">
Все перечисленные атрибуты (кроме взаимоисключающих) можно
перечислять через запятую. Понимаю, не все ясно, сейчас кое-что поясню.
1. Запрет на кэширование вообще (документ не будет
кэшироваться ни proxy-сервером, ни браузером):
<meta http-equiv="Cache-Control"
content="no-cache">
2. Документ будет кэшироваться браузером, но не будет
кэшироваться proxy-сервером:
<meta http-equiv="Cache-Control"
content="private">
3. Документ будет кэшироваться, даже если и не должен,
вроде бы, при обычных обстоятельствах:
<meta http-equiv="Cache-Control"
content="public">
4. Документ кэшируется, но не сохраняется в архиве:
<meta http-equiv="Cache-Control"
content="no-store">
5. Можно прямо сказать браузеру: "Обнови-ка мне эту
страницу". (В параметре max-age указано, на сколько секунд кэшируется
документ). Может быть полезно при использовании PHP для программного обновления
страниц:
<meta http-equiv="Cache-Control"
content="max-age=3600, must-revalidate">
6. А можно сказать это только прокси-серверу:
<meta http-equiv="Cache-Control"
content="max-age=3600, proxy-revalidate">
В наследство от протокола HTTP 1.0 нам достался очень простой
способ управления кэшированием, определяется директивой Pragma. Данная штука
является общей директивой заголовка HTTP-сообщения в HTTP 1.0, и других
значений, кроме no-cache, не имеет:
<meta http-equiv="Pragma"
content="no-cache">
В протоколе HTTP 1.1 данная директива заменена директивой
Cache-Control со значением no-cache. Большинство серверов и клиентов
поддерживают эту директиву и правильно ее отрабатывают.
Для запрета на кэширование иногда не достаточно применения
директив управления кэшированием. Так, Netscape кэширует документы или их
компоненты даже при наличии директив Cache-Control и
Pragma. Для того, чтобы заставить перечитать компонент страницы (он
ведь получается с сервера по самостоятельному HTTP-запросу) можно установить
директиву Expires.
Вот такой вот получился разговор о кэшировании. А с тэгом META мы
еще встретимся. И не раз...
Литература по Internet
|