Запрет кеширования посредством PHP
Большинство сценариев формируют документы, которые при каждом запуске программы изменяются. Очевидно, если веб-браузер пользователя начнет кэшировать такие документы, во многих случаях пользователь получит на экране браузера совсем не то, что требуется, — неактуальные данные.
Запретить кэшировать документы браузером и Proxy-серверами можно при помощи средств языка PHP, а именно функции header().
- По одним данным, для этого надо вставить в начало сценария следующий код:
header('Cache-Control: no-store, private, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Expires: 0', false);
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Pragma: no-cache');
- По другим, вполне достаточно строки:
Header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
Для того, чтобы заставить веб-сервер передавать такие заголовки автоматически, требуется в файле .htaccess записать следующий код:
... <IfModule mod_headers.c> Header set Cache-Control "no-store, no-cache" </IfModule> <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "now" </IfModule> ...
Стоит отметить, что для сайтов, находящихся под высокой нагрузкой, имеет смысл всё-таки использовать кеширование для популярных страниц. Система кеширования может работать по такому принципу: разделить страницы на постоянные (содержимое которых никогда не меняется) и меняющиеся. При повторном обращении к постоянному файлу нужно полностью исключить запрос к сайту (сразу грузить из кеша), а для изменяющейся страницы в кеш сохраняется текущая версия вместе со временем последнего изменения (Last-Modified). При повторном обращении к изменяющейся странице сайт первым делом сравнивает переданное ему значение Last-Modified с реальной датой последнего изменения (к примеру, в случае с сайтом-форумом, это будет дата последнего сообщения в цепочке). Если эти два значения совпадают, то сайт возвращает код состояния HTTP 304 (Not Modified), намекая, что нужно использовать версию из кеша. Если же сайт видит, что версия в кеше устарела (переданный Last-Modified ссылается на более раннюю дату, чем реальная дата последнего изменения страницы), то запрос обрабаывается полностью (как если бы кеш не использовался). В последнем случае время загрузки страницы больше, из-за создания сайтом страницы и на передачи этой страницы по сети. При использовании серверного кеша (часто это часть веб-сервера) экономия получается только за счет создания страницы, но не передачи по сети. Для больших проектов имеет смысл использовать кеши нескольких уровней (кеш сервера, кеш браузера, возможно другие).
| Запрет кеширования посредством PHP относится к теме «Программирование» |