Что могло добавлять “Pragma:no-кэш” к моим Заголовкам ответа? (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, кажется, не имеет ничего связанного также.

Какие-либо идеи, что могло устанавливать их "прагма" (и "управление кэша") заголовки, и как я могу избежать его?

30
задан Alexis Wilke 27 March 2016 в 18:30
поделиться

3 ответа

Создайте простой файл, который не включает ни одну из ваших библиотек 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 .

Удачи!

10
ответ дан 27 November 2019 в 23:40
поделиться

Если это не в .htaccess, то это может быть в главном конфигурационном файле Apache - или в одном из его включений, в зависимости от настройки.

1
ответ дан 27 November 2019 в 23:40
поделиться

Попробуйте отключить заголовки в .htaccess . В приведенном ниже примере они будут отключены для всех файлов, соответствующих расширению ico , jpeg , png , gif , js ], css :

<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
    Header unset Cache-Control
    Header unset Pragma
</FilesMatch>

Вы можете найти некоторые подсказки в этой статье .

8
ответ дан 27 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: