我在显示图像的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 / 1.1 200 OK 日期:星期一,2012年1月16日21:21:25 GMT
服务器:Apache / 2.2.16(Debian)
X-Powered-By:PHP / 5.3.3-7 + squeeze3
Set-Cookie:PHPSESSID = 86m4rha4rvth4q8srrpg48t4t0;路径= /
到期日:2012年1月16日星期一23:21:25 GMT
缓存控制:max-age = 7200,public
Pragma:public
Last-Modified:太阳,2012年1月15日14:42:39 GMT
内容长度:223247
内容处理:内联; 连接:关闭
内容类型:image / png
最后,你可以在这里看到PHP服务: http://spinephp.info/service/MediaLibrary/mediaWithId/1.jpg
如果我将文件加载到Chrome或任何其他浏览器,我总是从服务器获得200 OK回复,浏览器永远不会从其缓存中加载文件。
我不知道我做错了什么。 有没有人对我有任何线索?
[编辑] 更确切地说,我想要的是客户端浏览器在2小时内根本不查询服务器。这可能吗?
答案 0 :(得分:0)
您需要评估客户端发送的If-Modified-Since
标头。如果此后文件尚未修改,则应仅发送304
响应。
您可以通过301
重定向到实际文件并让Web服务器完成工作来保存自己的代码。
答案 1 :(得分:0)
这对我有用。只是不要点击F5,因为这会强制刷新。要测试它,只需单击您的地址栏并按Enter键。
解析If-Modified-如果您确实进行了真正的刷新,那么这是一个额外的好处。