Управление кэшем через заголовки PHP — Chrome работает / Firefox не работает

#php #apache #caching #http-headers

#php #apache #кэширование #http-заголовки

Вопрос:

У меня есть очень простое управление кэшем заголовков, настроенное для нескольких моих файлов на основе php (изображения, css, json).

По сути, chrome кэширует, а firefox нет.

Вот код заголовка:

 header('Cache-Control: max-age=300, must-revalidate');
header("Expires: " . gmdate("D, d M Y H:i:s", time()   300) . " GMT");
  

Любая помощь приветствуется.

Комментарии:

1. Ваши изображения / css / json обслуживаются с помощью PHP-скрипта (как в readfile, file_get_contents, fopen и т.д.) Или вы генерируете HTML, который ссылается на изображения / css / json, Используя PHP?

2. Да, через fopen и echoing; куда отправляются / кэшируются заголовки файлов php.

3. Было бы эффективнее настроить apache, чтобы он делал это за вас. Доступ к статическому файлу через PHP приведет к увеличению накладных расходов на запрос.

4. Загляните на этот сайт и посмотрите, полезно ли это вообще: Ускорьте свой сайт с помощью кэширования и cache-control . В нем объясняется, как использовать различные модули Apache для выполнения того, что вы пытаетесь сделать (и как предложено @datasage.)

5. @datasage ему, вероятно, нужен уровень и детализация контроля доступа , которые apache не может предоставить

Ответ №1:

Проверьте полный HTTP-заголовок, который фактически отправляется в браузер, с помощью чего-то вроде живых HTTP-заголовков

Используете ли вы сеансовые функции PHP?

PHP может устанавливать определенные заголовки HTTP кэша при использовании сеансов. session_start() устанавливает заголовки кэша, которые могут быть настроены с помощью session_cache_limiter(). Значение по умолчанию для ограничителя кэша может быть перезаписано в php.ini. Все это может привести к путанице при попытке установить собственные заголовки кэша, поэтому убедитесь, что вы проверяете фактические отправленные заголовки.