如何在单页应用程序中重新获取图像?

How to refetch images in a single page app?

我做了很多研究并尝试了很多方法来解决我的问题,但要么我做错了什么,要么我就是不知道该怎么做。

我有这个显示图像缩略图的 JS 单页应用程序。我将图像响应 header 设置为使用 etags,因为每个缩略图都可能随时间变化。

发生的事情是这样的: 1. 我加载页面并看到有一个 GET 调用来检索带有这些响应 headers 的缩略图(设置了 etag,cache-control 和 no-cache,过期日期设置为一天过去):

date: Wed, 25 Mar 2015 13:24:56 GMT
cache-control: private, no-cache, max-age=0
expires: Tue Mar 24 2015 09:24:56 GMT-0400 (EDT)
etag: 1427215131000
  1. 我转到页面的另一部分(页面上没有显示缩略图)。
  2. 我回到缩略图视图,我看到了缩略图图像,但没有重新提取(没有调用 GET 来检索缩略图)。

我需要进行此 GET 调用以验证服务器上的图像是否已更改(基于 etag)。顺便说一句,我也关闭了浏览器中的缓存,但我仍然没有看到任何 GET 调用。

有人知道如何解决这个问题吗?

非常感谢!

我用了socket.io。每当后端更改图像时,都会通过 socket.io 发送更新消息,通知前端特定图像已更改,需要重新获取。

前端将确保下次调用此图像时会在调用末尾添加时间戳,以便对服务器进行重新获取调用。

例如:

  1. 用户来到页面,图像 URL 是 http://www.example.com/images/logo.png
  2. 用户在网站上导航,图像 URL 仍然是 http://www.example.com/images/logo.png
  3. 后台图片变化:事件发送到前端。
  4. 用户浏览单个 Web 应用程序并且必须再次显示徽标图像。图片 URL 已更改为 http://www.example.com/images/logo.png?_=1427980814941
  5. 用户在网站上导航,图片 URL 现在还在 http://www.example.com/images/logo.png?_=1427980814941
  6. 如果后端有其他变化,我们将返回到第 3 步。