Проблема с кешем в заголовке http в php - PullRequest
0 голосов
/ 17 января 2012

Я работаю над php-сервисом, который отображает изображения.Моя проблема в том, что я не могу правильно обработать кеш браузера.

Это код:

date_default_timezone_set('Europe/Brussel');
$expireTime = 7200;
header('Date: '.gmdate('D, d M Y H:i:s', time()).' GMT');
header('Expires: '.gmdate('D, d M Y H:i:s', time() + $expireTime).' GMT');
header('Cache-Control: max-age='. ($expireTime).', public'); // must-revalidate ?
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($path)).' GMT');
header('Content-Type: '.HelpersFile::getMIME($path));
header('Content-Length: ' . filesize($path));
header('Content-Disposition: inline;');
header('Pragma: public');
$fileRessource = fopen($path, 'rb');
fpassthru($fileRessource);
header('Connection: Close');
exit();

И это результат в http://web -sniffer.net / :

Статус: HTTP / 1.1 200 OK Дата: понедельник, 16 января 2012 21:21:25 GMT
Сервер: Apache / 2.2.16 (Debian)
X-Работает на: PHP / 5.3.3-7 + squeeze3
Set-Cookie: PHPSESSID = 86m4rha4rvth4q8srrpg48t4t0;путь = /
Истекает: понедельник, 16 января 2012 23:21:25 GMT
Контроль кэша: max-age = 7200, общедоступный
Прагма: общедоступный
Последнее изменение: вс, 15 янв.2012 14:42:39 GMT
Content-Length: 223247
Content-Disposition: inline;Подключение: закрыть
Content-Type: image / png

И, наконец, вы можете увидеть службу PHP здесь: http://spinephp.info/service/MediaLibrary/mediaWithId/1.jpg

Если я загружу файл в Chrome илиВ любом другом браузере я всегда получаю ответ 200 OK от сервера, и браузер никогда не загружает файл из своего кэша.

Понятия не имею, что я делаю не так.У кого-нибудь есть подсказка для меня?

[Edit] Если быть более точным, я хочу, чтобы клиентский браузер вообще не запрашивал сервер в течение 2 часов.Это возможно?

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Это работает для меня.Только не нажимайте F5, потому что это приведет к обновлению.Чтобы проверить это, просто нажмите на адресную строку и нажмите Enter.

Парсинг If-Modified-Since является дополнительным преимуществом, если вы делаете реальное обновление.

0 голосов
/ 17 января 2012

Вам необходимо оценить заголовок If-Modified-Since, отправленный клиентом.Если с тех пор файл не был изменен, вам следует отправить только ответ 304.

Вы можете сохранить некоторый код, перенаправив 301 к реальному файлу и разрешиввеб-сервер делает работу.

...