浏览器不缓存生成的图像

时间:2012-01-11 14:07:34

标签: image caching browser

似乎在某些测试中,Firefox不会缓存动态生成(或从缓存服务器端加载)的图像。

demonstration1 demonstration2

我尝试使用标头启用缓存:

$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");

我不喜欢这种方法,因为它会导致两个请求。

有没有人可以帮助我,让我知道如何让浏览器缓存这些文件?

请求网址未更改,且不包含任何种子或时间戳。

2 个答案:

答案 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标头来比较文件是否未被修改,因此无需重新下载文件。 :