1

在这个问题上,我一直在安静地凝视一段时间,但没有任何运气,希望有人能提供帮助。

在开发具有应用程序缓存的 Web 应用程序时,这些问题涉及应用程序缓存、浏览器缓存和代理。

关于网络应用程序:

该网络应用程序显示高分辨率图像并允许用户在它们之间导航。为了使交互流畅,所有的图像都使用 ajax 预加载(加载是半智能的,所以它会在加载时显示图像,然后在后台继续加载其余的图像)。除此之外,整个网络应用程序都缓存在应用程序缓存中(使用清单文件),以便在 iPad 上离线访问。此外,这将提高其他浏览器的一般性能。

问题:

当清单文件更新时,浏览器(主要在 OSX 上的 Chrome 和 Firefox 中测试)从浏览器缓存中加载文件,而不是从服务器请求它们。有时,浏览器缓存已过期,请求将转到实际服务器或代理。通常这会导致网络应用程序没有更新。

我们试图在一个缓存控制头:

no-cache, must-revalidate(在 Firefox 中运行需要无缓存)。

这非常适合支持应用程序缓存的浏览器,强制它们在请求中包含这两个标头:

  • 如果无匹配
  • If-Modified-Since

当从清单文件请求新资产时。但是,在不支持应用程序缓存的浏览器或被告知不要通过清单文件缓存任何内容的浏览器中,没有文件会缓存在常规浏览器缓存中。然后,这些浏览器将在显示图像时再次请求图像(不使用已通过 ajax 调用下载的缓存图像)。服务器会以 304 响应,所以问题还不错,但不是最佳解决方案。

我想要什么:

我希望在应用程序缓存中缓存文件的浏览器包含两个标头:

  • 如果无匹配
  • If-Modified-Since

当他们看到清单文件已更新时。对于不使用应用程序缓存的浏览器,我希望它像往常一样缓存文件,而不是在同一个会话中向服务器发送多个请求。

这是可能的,还是有其他解决方案?

谢谢你的帮助。

4

0 回答 0