Подтвердить что ты не робот

Что может добавить "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, похоже, не имеет ничего связанного.

Любые идеи, которые могли бы задавать заголовки "прагма" (и "кеш-контроль" ), и как я могу его избежать?

4b9b3361

Ответ 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 ., чтобы просмотреть файлы.