似乎在某些测试中,Firefox不会缓存动态生成(或从缓存服务器端加载)的图像。
我尝试使用标头启用缓存:
$expires = 60*60*24*14;
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
但无济于事。我仍然得到“200 OK”而不是“304 Not Modified”。
使用Stackoverflow上的搜索寻求答案,我发现某人暗示他们宁愿将浏览器直接重新定位到图像。
像:
header("Location: /img/generated/whatever.png");
我不喜欢这种方法,因为它会导致两个请求。
有没有人可以帮助我,让我知道如何让浏览器缓存这些文件?
请求网址未更改,且不包含任何种子或时间戳。
答案 0 :(得分:0)
您可以尝试相反的方式。如果您不想重新定位浏览器。您可以使用.htacess或/和mod_rewrite或其他依赖Web服务器的模块重写您的URL。例如以下网址:
http://sub.domain.com/img/gen/<param>/.../<paramN>/image.png
将被转发(没有客户端重定向)到您的脚本中具有param值的脚本。这意味着您只有一个请求。
可以在此处找到执行此类操作的示例:
答案 1 :(得分:0)
此处缺少的是您的响应标头中的上次修改标头。前Last-Modified:Wed, 15 Feb 2012 10:07:48 GMT
。你可以通过在标题中使用这一行解决这个问题。
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
之所以你应该拥有这个,是因为浏览器使用上一个modidfied标头来比较文件是否未被修改,因此无需重新下载文件。 :