背景
我正在为两个公益网站编写和使用一个非常简单的基于 CGI (Perl) 的内容管理工具。它为网站管理员提供了用于填写字段(日期、地点、标题、描述、链接等)并保存的事件的 HTML 表单。在该表单上,我允许管理员上传与该事件相关的图像。在显示表单的 HTML 页面上,我还显示了上传图片的预览(HTML img 标记)。
问题
当管理员想要更改图片时,就会出现问题。他只需点击“浏览”按钮,选择一张新图片,然后按确定。这很好用。
上传图片后,我的后端 CGI 会处理上传并正确重新加载表单。
问题是显示的图像没有刷新。即使数据库拥有正确的图像,旧图像仍会显示。我已将其范围缩小到图像被缓存在网络浏览器中的事实。如果管理员在 Firefox/Explorer/Safari 中点击 RELOAD 按钮,一切都会正常刷新,新图像就会出现。
我的解决方案 - 不工作
我试图通过编写一个日期很远的 HTTP Expires 指令来控制缓存。
Expires: Mon, 15 Sep 2003 1:00:00 GMT
请记住,我在管理方面,我并不关心页面是否需要更长的时间来加载,因为它们总是过期的。
但是,这也不起作用。
笔记
上传图像时,其文件名不会保存在数据库中。它被重命名为Image.jpg(在使用它时简单地说明一下)。用新图像替换现有图像时,名称也不会改变。只是图像文件的内容发生了变化。
网络服务器由托管服务/ISP 提供。它使用 Apache。
问题
有没有办法强制网络浏览器不缓存此页面的内容,甚至不缓存图像?
我正在处理使用数据库实际“保存文件名”的选项。这样,如果图片改变了,IMG标签的src也会改变。但是,这需要整个站点进行大量更改,如果我有更好的解决方案,我宁愿不这样做。此外,如果上传的新图像具有相同的名称,这仍然不起作用(例如图像经过了一些照片处理并重新上传)。