Назад | Перейти на главную страницу

Веб-сервер кэширует вывод PHP

Я пользуюсь услугами хостинга 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');