Что может добавить «прагма: нет кэши» на мои заголовки ответа? (Apache, PHP)

StackOverflow https://stackoverflow.com/questions/3047902

Вопрос

У меня есть веб-сайт, который я унаследовал, который является большим волосатым беспорядком.
Одна из вещей, которые я делаю, является улучшение производительности. Среди прочего, я добавляю 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 - или один из его включений в зависимости от установки.

Стоит отметить, что люди с аналогичными проблемами, которые многие рамки будут автоматически добавлять заголовки, особенно кэширующиеся. Это довольно легко перегрузить их в рамках библиотеки или в вашем приложении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top