Управляем кэшированием файлов
Кэширование
Кэширование - (в общем случае и упрощенно) временное сохранение информации для быстрого повторного доступа.
С точки зрения пользователя интернет, кэширование - это сохранение временных файлов на своем компьютере. Разные браузеры (internet explorer, mozilla firefox, google chrome, opera..) используют различные места для хранения временных файлов (Temporary Internet Files). Пользователь может и не подозревать о том, что часть файлов из интернета сохранена у него на компьютере.
Для администраторов (с увеличением оборудования увеличиваются и места для возможного сохранения информации) термин кэширование распространяется и на промежуточные устройства между веб-сервером и конечным пользователем (всевозможные Nat, proxy-серверы, маршрутизаторы.. и, возможно, другие сетевые устройства)
Для придирчивых поясню, что не рассматриваем кэширование, не имеющее отношение к интернет-серфингу (брожение по интернету) (кэш в жестких дисках, cd,dvd,bd и других дисководах, программное кэширование при записи на диск, кэширование скомпилированных шаблонов и т.д. …)
В большинстве случаев кэширование позволяет сохранить массу ресурсов - за информацией не приходится обращаться повторно, что экономит как ресурсы сервера, компьютера пользователя, так и трафик. Большинство изображений (например, из “шапки” сайта) не изменяются, а используются на многих страницах сайта.
Но иногда кэширование может “мешать” - если документы на сервере изменяются довольно часто, либо вообще формируются динамически. Как объяснить браузеру, какие документы нужно кэшировать, а какие - нельзя. И с какой периодичностью эти документы должны обновляться?
Управление кэшированием документов HTTP-заголовками
Протокол HTTP позволяет передавать служебную информацию в заголовках. Для информации о возможности кэширования файлов используются следющие заголовки:
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
В общем случае, использование этих заголовков достаточно для управления кэшированием на прокси-серверах и в браузере. Если значения заголовков полностью совпадают с приведенными выше, то файлы кэшироваться не будут.
Более подробно о допустимых значениях параметров можно прочитать в спецификации протокола HTTP.
header("HTTP/1.0 404 Not Found");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header(”Expires: Mon, 3 Apr 2000 07:00:00 GMT”);
header(”Last-Modified: ” . gmdate(”D, d M Y H:i:s”) . ” GMT”);
header(”Cache-Control: max-age=0″, false);
Как передать HTTP-заголовок браузеру
Дополнено:
<?php
/*
** Правильный запрет кэширования
*/
header("Cache-Control: no-store");
header("Expires: " . date("r"));
?>
<?php
/*
** Включение кэширования на 1 час
*/
header("Cache-Control: public");
header("Expires: " . date("r", time() + 3600));
?>
.htaccess
#
# Запрещение кеширования в этой папке
# Необходимо включение модулей
# mod_headers.c и mod_expires.c
#
# Заголовок Cache-Control
<IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
# Заголовок Expires
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault "now"
</IfModule>
#
# Разрешение кеширования в этой папке
# Необходимо включение модулей
# mod_headers.c и mod_expires.c
#
# Заголовок Cache-Control
<IfModule mod_headers.c>
Header append Cache-Control "public"
</IfModule>
# Заголовок Expires
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault "access plus 1 hours"
</IfModule>
Кэширование картинок и css в .htaccess
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
</IfModule>
# альтернативный способ - возможно, модуль отсутствует на сервере
<IfModule mod_headers.c>
<FilesMatch "\.(ico|jpe?g|png|gif)$">
Header set Cache-Control "max-age=2592000, private"
</FilesMatch>
#кэширование css, javascript и txt-файлов на неделю
<FilesMatch ".(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
#кэширование flash и картинок на месяц
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
</IfModule>
Метки: Cache, Кэш, Кэширование
Вкусные рецепты…
Много вкусных бюджетных рецептов на aromats.net
bertal.ru - посмотреть, что получает сайт в зависимости от установленного user agent
1contamination…
…