当前位置: 首页 > 面试题库 >

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

薛弘壮
2023-03-14
问题内容

背景

我正在为两个公益网站编写和使用一个非常简单的基于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也将更改。但是,这需要对整个站点进行大量更改,如果我有更好的解决方案,我宁愿不做。同样,如果上传的新图像具有相同的名称,这仍然不起作用(例如,将该图像进行了照片购物并重新上传)。


问题答案:

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

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

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



 类似资料:
  • 问题内容: 有什么办法可以在页面上放置一些代码,以便当有人访问网站时,它会清除浏览器缓存,以便他们可以查看更改? 使用的语言:ASP.NET,VB.NET,当然还有HTML,CSS和jQuery。 问题答案: 如果这是关于和变化,一种方法是到“缓存无效”是通过附加像“ ”为每个版本的文件名。例如: 或者,在文件名之后执行此操作:

  • 问题内容: 这些天,我的应用程序一直在变化,因为我们的团队现在正在运行快速更新。 由于缓存,我们的客户并不总是拥有最新版本的代码。 那么有没有办法强制浏览器清除缓存? 问题答案: 您可以使用一种非常简单的解决方案,其中包括将哈希值附加到脚本文件中。每次部署App时,您都会通过gulp /grunt任务自动为文件提供不同的哈希值。例如,您可以使用gulp-rev。我在所有项目中都使用了这种技术,并且

  • 我可以强制浏览器缓存WPS 6.1响应的页面吗? 强制浏览器缓存页面是满足要求的一种方式吗? 我尝试创建一个过滤器并在wps中配置它。 它正在工作,但HTTP标头仍然是: 缓存控制无缓存 内容语言en US 内容类型文本/html;charset=UTF-8 日期2012年5月11日星期五07:50:19 GMT 到期时间1970年1月1日星期四00:00:00 GMT IBM-Web2-Loca

  • 问题内容: 我对如何缓存图像是全新的。 我使用PHP输出图库中的所有图像,并希望已显示的图像由浏览器缓存,因此PHP脚本不必再次输出相同的图像。我想要的只是图像显示得更快。 调用图像时,我喜欢这样: 和-file做: 问题答案: 如果您使用php在输出消息之前检查用户是否已登录,则您不希望浏览器缓存图像。 缓存的全部目的是调用服务器一次,然后再也不调用它。如果浏览器缓存图像,它将不会调用服务器,并

  • 推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html 304 Not Modified

  • 问题内容: 我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此。当你更新这些文件之一但用户的浏览器继续使用缓存的副本时,这会导致出现问题。 问题是:强制用户浏览器在文件更改后重新加载文件的最优雅方法是什么? 理想情况下,该解决方案不会强制浏览器在每次访问页面时重新加载文件。我将发布自己的解决方案作为答案,但我很好奇是否有