Библиотека программиста

17.02.2025 - Запрет кэширования страниц, кэшируемых по умолчанию

Эта задача возникает для PHP-скриптов вызываемых без параметров или являющимися индексами директорий, однако формирующих данные персонально под пользователя (например на основе cookies или user agent) или работающих на основе быстро изменяющихся данных.




По спецификации HTTP/1.1 мы можем управлять следующими полями:

Expires

Задает дату истечения срока годности документа. Задание ее в прошлом определяет запрет кэш для данной страницы.

Cache-control: no-cache

Управление кэш. Значение no-cache определяет запрет кэш данной страницы. Для версии протокола HTTP/1.0 действует "Pragma: no-cache".

Last-Modified

Дата послднего изменения содержимого. Поле актуально только для статических страниц. Apache заменяет это поле значением поля Date для динамически генерируемых страниц, в том числе для страниц содержащих SSI.

На сайте www.php.net дается следующий код для запрета кеширования.

PHP - Код
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
      
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // always modified
      
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
      
header("Pragma: no-cache"); // HTTP/1.0



Однако, я считаю, что данный заголовок избыточен. В большинстве случаев достаточно:

PHP - Код
header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");



Чтобы пометить документ как "уже устаревший" следует установить Expires равным полю Date.

PHP - Код
header("Expires: " gmdate("D, d M Y H:i:s") . " GMT");



Ну и не следует забывать, что формы, запрошенные по POST также не подлежат кэшированию.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=63