Что может добавить "Pragma: no-cache" к моим заголовкам ответов? (Apache, PHP)
У меня есть веб-сайт, на котором я унаследовал обслуживание, которое представляет собой большой волосатый беспорядок.
Одна из вещей, которые я делаю, - это повышение производительности. Среди прочего, я добавляю заголовки 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, похоже, не имеет ничего связанного.
Любые идеи, которые могли бы задавать заголовки "прагма" (и "кеш-контроль" ), и как я могу его избежать?
Ответы
Ответ 1
Создайте простой файл, который не содержит ни одной из ваших библиотек 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
- единственный способ (я думаю), что необработанный PHP-код может устанавливать заголовки ответа. Вы также захотите выполнить поиск
call_user_func
eval
$$
в случае наличия на странице динамического кода, использующего возможности метапрограмм PHP, для вызова функции header
.
Удачи!
Ответ 2
Виной может быть php.ini, где session.cache_limiter = nocache. Измените значение на пустое или общедоступное, чтобы избежать заголовков анти-кэширования.
Ответ 3
У меня была аналогичная проблема с Pragma: nocache
session_cache_limiter(false);
до session_start();
, казалось, подавлял его.
Ответ 4
Попробуйте отключить заголовки в .htaccess
. Следующий пример отключит их для всех файлов, соответствующих расширениям ico
, jpeg
, png
, gif
, js
, css
:
<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
Header unset Cache-Control
Header unset Pragma
</FilesMatch>
Вы можете найти некоторые подсказки в в этой статье.
Ответ 5
Я сделал это во время выполнения с этим:
header("Pragma:");
который заставил script отключить заголовок Pragma.
Ответ 6
Если он не находится в .htaccess, он может находиться в главном файле конфигурации Apache или один из его включений, в зависимости от настройки.
Ответ 7
Стоит отметить людей с похожими проблемами, что многие фреймворки автоматически добавят заголовки, особенно кеширующие. Это довольно легко перегрузить их либо в библиотеке фреймворка, либо в вашем приложении.
Ответ 8
Запустите grep -R pragma .
, чтобы просмотреть файлы.