У меня есть веб-сайт, какое обслуживание я наследовал, который является большой волосатой путаницей.
Одна из вещей, которые я делаю, улучшает производительность. Среди прочего добавляю я 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, используемые в запросе. (вам, вероятно, потребуется просмотреть исходный код или использовать curl, чтобы увидеть необработанный вывод, поскольку браузер сообщит о недопустимом изображении)
Имея подмножество ваших файлов для рабочего файла, выполните поиск в них вызовов
header();
функция. Функция заголовка
- единственный (я думаю) способ, которым необработанный PHP-код может устанавливать заголовки ответа. Вы также захотите выполнить поиск
call_user_func
eval
$$
на случай, если на странице есть какой-либо динамический код, который использует возможности метапрограммирования PHP для вызова функции header
.
Удачи!
Если это не в .htaccess, то это может быть в главном конфигурационном файле Apache - или в одном из его включений, в зависимости от настройки.
Попробуйте отключить заголовки в .htaccess
. В приведенном ниже примере они будут отключены для всех файлов, соответствующих расширению ico
, jpeg
, png
, gif
, js
], css
:
<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
Header unset Cache-Control
Header unset Pragma
</FilesMatch>
Вы можете найти некоторые подсказки в этой статье .