Кэширование в 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".