Управляем кэшированием файлов

Кэширование

Кэширование - (в общем случае и упрощенно) временное сохранение информации для быстрого повторного доступа.

С точки зрения пользователя интернет, кэширование - это сохранение временных файлов на своем компьютере. Разные браузеры (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>

Метки: , ,

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (2) к записи “Управляем кэшированием файлов”

  1. Рецепты вкусных блюд сообщает :

    Вкусные рецепты…

    Много вкусных бюджетных рецептов на aromats.net

  2. Федор сообщает :

    bertal.ru - посмотреть, что получает сайт в зависимости от установленного user agent

Добавить комментарий