Я пользуюсь услугами хостинга Gandi.net, и совсем недавно они начали делать что-то тревожное. Они кэшируют вывод программ PHP, очевидно, чтобы избежать запуска кода PHP, и отправляют его всякий раз, когда пользователь (пользователи) с определенного IP-адреса запрашивают страницу. В результате я могу получить страницу в Firefox, например. тот, который печатает мой пользовательский агент, и выглядит нормально, но если я помещу этот URL-адрес в Chrome или Safari или даже получу страницу с помощью Curl, я увижу результат, который я видел в Firefox. Это происходит на 180 градусов, в отличие от того, как я думал, как должны работать веб-серверы. В конце концов, PHP - это язык программирования, и он может выводить разный HTML от секунды до секунды. Кто они такие, чтобы предположить, что он всегда будет выводить одни и те же данные и кэшировать их? Кстати, мои файлы PHP имеют расширение .php.
Есть ли способ обойти этот механизм кеширования, например Могу ли я сказать PHP, чтобы он поместил в заголовок что-то, что укажет кешу не кэшировать HTML?
Все запросы к экземплярам Gandi Simple Hosting проходят Система кеширования лака, так что не ваш веб-сервер кэширует ответы, а эта задокументированная функция кэширования вашей службы хостинга.
Экземпляры Simple Hosting и веб-ускорители получают преимущества от мощной системы кеширования на базе Varnish. Это позволяет вам распространять контент вашего веб-сайта среди большего количества посетителей, не используя ресурсы вашего экземпляра или сервера.
В этой документации предлагается использовать Cache-Control: max-age=1
, но Cache-Control: no-cache
и даже Cache-Control: private
(предназначено для одного пользователя) должно быть в порядке. (Видеть Cache-Control
.)
Например, в php:
header("Cache-Control: max-age=1");
Если вы не хотите добавлять его в каждый скрипт PHP отдельно, вы можете использовать .htaccess
предоставленное решение, которое также работает в контексте конфигурации сервера, виртуального хоста и каталога:
Пример файла .htaccess, если это статический веб-сайт:
Header add Cache-Control "max-age=1"
Для полноты, вот пример Nginx, ограниченный .php
файлы:
location ~* \.php$ {
add_header Cache-Control "no-cache";
}
Я нашел ответ. Пусть это будет известно всем людям, низким и высоким, худым и толстым, решение есть.
header ('Cache-Control: no-cache');