Кэширование в HTTP
Кэширование - эффективный метод ускорения работы сайтов, однако, в то же
время оно может вызывать побочные эффекты, требует грамотной настройки, а также
создаёт трудности в отладке.
Осуществляться кэширование может браузером, прокси-серверами, в том
числе при обратном проксировании (именно для этого обычно и ставят обратные
прокси типа nginx). Во всех случаях использование кэша снижает нагрузку на
сервер, но стоит отметить, что когда сгенерированные динамические страницы
кэшируются на сервере, это снижает расход оперативной памяти и процессорного
времени, но увеличивает нагрузку на дисковую подсистему. Если узким местом
является диск, такое кэширование может не дать ожидаемых результатов.
Рассмотрим некоторые возможности по управлению кэшем из PHP
Запрет кэширования
В принципе, для запрета кэширования достаточно выставить соответствующие HTTP заголовки:
<?php
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Expires: ' . date('r'));
?>
Это приведет к запрету кэширования как браузером, так и прокси серверами.
Указание времени кэширования
Здесь также ничего сложного. Установим Expires в нужное нам время и, на всякий случай, разрешим кэширование явно:
<?php
header('Cache-Control: public');
header('Expires: ' . date('r', time() + 3600));
?>
Такой заголовок разрешит кэширование страницы на 1 час - кэшированные копии будут считаться валидными до наступления момента, указанного в "Expires".