Какие заголовки я отправляю для кэширования вывода PHP-скрипта? - PullRequest
2 голосов
/ 03 февраля 2011

Я использую PHP-скрипт для обслуживания изображений (хранящихся вне webroot) посетителям, которые предоставили учетные данные, позволяющие им получить доступ.

Я отправляю следующие заголовки: «Content-Type», «Last-Modified», «Content-Length», «Content-Disposition» (для задания имени файла).

Я включил код для проверки $_SERVER['HTTP_IF_MODIFIED_SINCE'] и, если необходимо, отправил «HTTP / 1.1 304 Not Modified» и вышел. Но в Firebug я заметил, что заголовки ответа на запрос включают следующее:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

и изображение действительно загружается заново каждый раз, когда я просматриваю страницу. Это не нужно; имеет смысл для кэширования изображений клиентом. Но я не знаю, какие дополнительные заголовки я должен отправить, чтобы это произошло. Какие заголовки мне нужно отправить?

Редактировать: Это команды заголовка, которые я добавил в скрипт:

header('Cache-Control: private, max-age=0, must-revalidate');
header('Expires: Sat, 1 Jan 2000 12:00:00 GMT');
header('Pragma:');

Ответы [ 3 ]

3 голосов
/ 03 февраля 2011

Вы используете сеансы? Они, как правило, отправляют заголовки без кэширования для принудительной загрузки новой страницы каждый раз, или какой-то другой раздел / модуль вашего сайта отправляет их.

Вы можете попытаться форсировать заголовок управления кэшем с помощью чего-то вроде:

header("Cache-control: max-age=3600, must-revalidate");
1 голос
/ 03 февраля 2011

Вы можете отправить заголовки Expires, Cache-Control и Pragma самостоятельно:

Expires использует дату, формат RFC 1123, например: Expires: Thu, 03 Feb 2011 15:16:16 GMT

Для Cache-Control вы можете сделать: Cache-Control: public, max-age: 3600. Максимальный возраст в секундах.

Что касается Pragma, вы можете отключить ответ веб-сервера по умолчанию без кэширования с помощью:

header('Pragma: ');

PS. На многих веб-серверах также есть способ сообщить серверу, обрабатывающему файл.

В lighttpd вы можете использовать заголовок x-sendfile . В Apache вы можете использовать mod_xsendfile , если он установлен для того же. В nginx вы можете использовать заголовок X-Accel-Redirect . Работа со статическими файлами - это действительно работа веб-сервера, и это очень удобные функции, которыми вы можете воспользоваться, при этом скрывая ваши файлы от публичной области документации. Для других веб-серверов вы можете использовать отправку заголовков для кэширования самостоятельно.

0 голосов
/ 03 февраля 2011

Вы можете установить Expires и Last-Modified, как описано в этом посте: Как кэшировать изображения, сгенерированные PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...