html - 如何强制网络浏览器不缓存图像

标签 html image caching browser-cache image-caching

背景

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

问题

当管理员要更改图片时出现问题。他只需要点击“浏览”按钮,选择一张新图片,然后按确定。这很好用。

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

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

我的解决方案 - 不工作

我正在尝试通过编写一个包含过去很久的日期的 HTTP 过期指令来控制缓存。

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

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

但是,这也不起作用。

注意事项

上传图片时,其文件名不会保存在数据库中。它被重命名为 Image.jpg(为了在使用时更简单)。用新图像替换现有图像时,名称也不会改变。只是图像文件的内容发生了变化。

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

问题

有没有办法强制网络浏览器不缓存此页面的内容,甚至不缓存图像?

我正在考虑使用数据库实际“保存文件名”的选项。这样,如果图片发生变化,IMG 标签的 src 也会发生变化。但是,这需要对整个站点进行大量更改,如果我有更好的解决方案,我宁愿不这样做。此外,如果上传的新图片具有相同的名称(假设图片经过 Photoshop 处理并重新上传),这仍然无效。

最佳答案

Armin Ronacher 的想法是正确的。问题是随机字符串会发生冲突。我会使用:

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

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

生成时间

关于html - 如何强制网络浏览器不缓存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/126772/

相关文章:

android - 在 Android 浏览器中使用 input type=file capture=camera 上传照片时,防止照片自动保存到图库

android - Swift 中的 Base64 编码不会在 Android 中解码

java - 是否有用于缓存文件的 Java 库?

php - Symfony2 - 注销并清除缓存 + 防止后退按钮

python - 最长的 Collat​​z(或 Hailstone)序列优化 - Python 2.7

jquery - 让 Jquery lavalamp 成为 fieldset 的传奇

html - 图像顶部文字的最佳解决方案

css - 表单给定 padding-right 即使 padding 是 0px

javascript - 数组中的一张图像未加载

html - 基于设备的不同列数