#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. Все это может привести к путанице при попытке установить собственные заголовки кэша, поэтому убедитесь, что вы проверяете фактические отправленные заголовки.