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