如何刷新相同的url图像并保留缓存?

时间:2011-09-02 09:37:10

标签: jquery ajax

我发现大多数解决方案都是在图像链接后添加“?+ time()”以强制浏览器每次下载图像,但是,如果图像没有真正的变化,这似乎不是理想的解决方案。

.ajax中的 ifModified 可以提供帮助吗?

欢迎任何想法,谢谢!


编辑:

有没有办法在图像墨水上添加“?+ ...”?

并考虑图像可能是远程资源。

3 个答案:

答案 0 :(得分:1)

您可以将图像的时间戳和文件大小(组合)添加为查询字符串(问号后面的内容)

基本上该文件的任何元数据都可用于此,也见过md5()实现,但我不确定它的扩展程度有多好。

这是一种没有数据库的简单方法。

答案 1 :(得分:1)

理想情况是,您附加文件修改时间(在服务器上)或** PHP filemtime()**时间戳。这样,只有当您更改服务器上的图像时,时间戳才会更改,所有用户立即(在下次加载时)会获得新版本的图像。

但是你必须使用服务器端语言,比如PHP。谷歌“filemtime()”了解更多信息。

代表性例子:

<img src="image.png?<?php echo filemtime('image.png');?>" />

或:

<?php
echo '<img src="image.png?'.filemtime('image.png').'" />';
?>

你也可以写一个函数为你做这个:

function image($file) {
   return $file.'?'.filemtime($file);
}
echo '<img src="'.image('image.png').'" />';

答案 2 :(得分:0)

还有另一种解决方案:

您也可以在未来一年设置Expires标头,如下所示:

到期日:2011年9月15日星期四20:00:00 GMT

这意味着浏览器会尝试将图像缓存一年,然后再次从服务器请求它。但如果你在那段时间改变图像,那可能会很糟糕。然后用户必须进行硬刷新(Control + F5)以强制刷新。保持我的第一个解决方案,甚至是更好的,同时使用它们。