小编典典

如何强制Web浏览器不缓存图像

html

背景

我正在为两个公益网站编写和使用一个非常简单的基于CGI的(Perl)内容管理工具。它为网站管理员提供事件的HTML表单,这些表单将填写字段(日期,位置,标题,描述,链接等)并保存。在该表格上,我允许管理员上传与事件相关的图像。在显示表单的HTML页面上,我还显示了上传图片的预览(HTML
img标签)。

问题

当管理员想要更改图片时,会发生此问题。他只需要点击“浏览”按钮,选择一张新照片,然后按OK即可。这很好。

上载图像后,我的后端CGI将处理上载并正确地重新加载表单。

问题是显示的图像 没有 刷新。即使数据库保存了正确的图像,仍会显示旧图像。我将其范围缩小为在网络浏览器中缓存了图像。如果管理员点击Firefox /
Explorer / Safari中的RELOAD按钮,一切都会刷新,并且会出现新图像。

我的解决方案-不起作用

我试图通过写一个HTTP Expires指令来控制缓存,该指令的日期已经过去了。

Expires: Mon, 15 Sep 2003 1:00:00 GMT

请记住,我在管理方面,我并不在乎页面的加载时间是否更长,因为它们总是过期的。

但是,这也不起作用。

笔记

上载图像时,其文件名不保留在数据库中。它被重命名为 Image.jpg
(以简化使用时的处理)。用新图像替换现有图像时,名称也不会更改。只是图像文件的内容会更改。

Web服务器由托管服务/ ISP提供。它使用Apache。

有没有一种方法可以强制Web浏览器不缓存该页面中的内容,甚至不缓存图像?

我正在尝试使用数据库来实际“保存文件名”的选项。这样,如果更改了图像,IMG标签的src也将更改。但是,这需要对整个站点进行大量更改,如果我有更好的解决方案,我宁愿不做。同样,如果上传的新图像具有相同的名称,这仍然不起作用(例如,将该图像进行了照片购物并重新上传)。


阅读 472

收藏
2020-05-10

共1个答案

小编典典

Armin Ronacher有正确的想法。问题在于随机字符串可能会发生冲突。我会用:

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

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

2020-05-10