为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何强制web浏览器不缓存图像

请问如何强制web浏览器不缓存图像

繁花如伊 2019-10-15 13:09:30
如何强制web浏览器不缓存图像背景我正在为两个公益网站编写和使用一个非常简单的基于CGI(Perl)的内容管理工具。它为网站管理员提供了HTML表单,用于填入字段(日期、地点、标题、描述、链接等)的事件。保存它。在该表单上,我允许管理员上传与事件相关的图像。在显示表单的HTML页面上,我还显示了上传图片的预览(HTMLIMG标记)。问题当管理员想要更改图片时,问题就会发生。他只需点击“浏览”按钮,选择一张新图片,然后按OK键即可。这个很好用。一旦图像被上传,我的后端CGI就会正确地处理上传和重新加载表单。问题是所显示的图像不振作起来。旧图像仍然显示,即使数据库持有正确的图像。我缩小了范围,因为图像被缓存在Web浏览器中。如果管理员点击Firefox/Explorer/Safari中的“重新加载”按钮,一切都会恢复正常,新图像就会出现。我的解决方案-不管用我试图通过编写一个HTTP过期指令来控制缓存,该指令的日期在很久以前。Expires: Mon, 15 Sep 2003 1:00:00 GMT请记住,我是在管理方面,我并不关心页面是否需要更长的时间来加载,因为它们总是过期的。但是,这也不起作用。注记上传图像时,其文件名不保存在数据库中。它被重命名为Image.jpg(简单地说,当使用它时)。当用新映像替换现有图像时,名称也不会更改。只更改图像文件的内容。Web服务器由主机服务/ISP提供。它使用Apache。问题有没有办法迫使网页浏览器不要缓存这个页面上的东西,甚至是图像?我正在处理的选项实际上是“保存文件名”与数据库。这样,如果图像被更改,IMG标记的src也会改变。然而,这需要在整个网站上做很多改变,如果我有一个更好的解决方案,我宁愿不去做。此外,如果上传的新图像具有相同的名称(假设图像是经过了一点光刻并重新上传),这仍然不能工作。
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

问题是随机字符串会发生碰撞。我会用:

<img src="picture.jpg?1222259157.415" alt="">

其中“1222259157.415”是服务器上的当前时间。
使用Javascript生成时间performance.now()或由Python与time.time()



查看完整回答
反对 回复 2019-10-17
?
catspeake

TA贡献1111条经验 获得超0个赞

简单修复:将随机查询字符串附加到图像:

<img src="foo.cgi?random=323527528432525.24234" alt="">

HTTP RFC是怎么说的:

Cache-Control: no-cache

但这并不是很好:)


查看完整回答
反对 回复 2019-10-17
?
慕的地10843

TA贡献1785条经验 获得超8个赞

我会用:

<img src="picture.jpg?20130910043254">

其中“20130910043254”是文件的修改时间。

上传图像时,其文件名不保存在数据库中。它被重命名为Image.jpg(简单地说,在使用它的时候)。当用新映像替换现有图像时,名称也不会更改。只更改图像文件的内容。

我认为有两种简单的解决方案:1)首先想到的那些(简单的解决方案,因为它们很容易想出);2)那些你经过深思熟虑后得到的解决方案(因为它们很容易使用)。显然,如果你选择重新考虑事情,你就不会总是受益。但我认为,第二种选择被低估了。想想为什么php是如此受欢迎;)



查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信