Что может добавить «прагма: нет кэши» на мои заголовки ответа? (Apache, PHP)
-
27-09-2019 - |
Вопрос
У меня есть веб-сайт, который я унаследовал, который является большим волосатым беспорядком.
Одна из вещей, которые я делаю, является улучшение производительности. Среди прочего, я добавляю Expires
заголовки к изображениям.
Теперь есть некоторые изображения, которые подаются через файл PHP, и я замечаю, что у них есть Expires
Заголовок, но они также загружаются каждый раз.
Глядя на заголовки ответа, я вижу это:
Expires Wed, 15 Jun 2011 18:11:55 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Что очевидно объясняет проблему.
Теперь я посмотрел по всему кодовой базе, и это не говорит «прагма» где угодно. .htaccess, похоже, не имеет ничего, что связано.
Любые идеи, что может быть установить эти заголовки «прагмы» (и «кэш-контроль»), и как я могу избежать этого?
Решение
Создайте простой файл, который не включает в себя ни один из ваших библиотек PHP, а проживает в той же папке, что и файл, который обслуживает ваши изображения через файл PHP.
file: test.php
Запросите этот файл через браузер и проверьте заголовки. Если вы видите заголовки ответа, которые вы не хотите, вы знаете, что они настраиваются через Apache и не сгенерированы через файл PHP, и вы можете сосредоточить ваши поиски на файле .htaccess в дереве каталогов, а также на http.confg И другие включены файлы конфигурации Apache. Вы захотите искать
<Directory....
и
<VirtualHost
Разделы, которые могут подать заявку на ваш сайт.
Если вы не увидите заголовки в запросе на этот простой PHP-файл, вы знаете, что PHP настраивает заголовки где-то. В конце вашего файла сервировки изображения (или сразу после его эхом и выходов и выходов), но следующий фрагмент PHP)
var_dump(get_included_files());
Запросите изображение через URL-адрес изображения. То, что над фрагментом распечатает все файлы PHP, используемые в запросе. (Вам, вероятно, нужно будет просмотреть источник или использовать завиток, чтобы увидеть необработанный вывод, так как браузер сообщит о неверном изображении)
Имея подмножество ваших файлов на рабочий файл, ищите их для вызовов на
header();
функция. То header
Функция является единственным способом (я думаю), что RAW PHP Code может установить заголовки ответа. Вы также захотите искать
call_user_func
eval
$$
в случае, если на странице есть какой-либо динамический код, использующий Meta-программирующие возможности PHP, чтобы вызвать header
функция.
Удачи!
Другие советы
Винприт может быть php.ini, где session.cache_limiter = nocache. Измените значение для пустой или общественности, чтобы избежать запасных заголовков против кэшей.
У меня была похожая проблема с Pragma: nocache
session_cache_limiter(false);
до session_start();
казалось, подавим его.
Попробуйте задержать заголовки в .htaccess
. Отказ Пример ниже приведен для всех файлов, соответствующих расширениям ico
, jpeg
, png
, gif
, js
, css
:
<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
Header unset Cache-Control
Header unset Pragma
</FilesMatch>
Вы можете найти некоторые намеки в Эта статья.
Я сделал это во время выполнения с этим:
header("Pragma:");
который заставил скрипт решать заголовок прагмы.
Если это не в .htaccess, это может быть в основном файле конфигурации Apache - или один из его включений в зависимости от установки.
Стоит отметить, что люди с аналогичными проблемами, которые многие рамки будут автоматически добавлять заголовки, особенно кэширующиеся. Это довольно легко перегрузить их в рамках библиотеки или в вашем приложении.