1

我想请您提供有关浏览器缓存失效的建议。

假设我们有一个带有 http 标头的索引页面返回给客户端:

Cache-Control: public, max-age=31534761
Expires: Fri, 17 Feb 2012 18:22:04 GMT
Last-Modified: Thu, 17 Feb 2011 18:22:04 GMT
Vary: Accept-Encoding

如果用户再次尝试点击该索引页面,浏览器很可能甚至不会向服务器发送请求——它只会向用户呈现页面的缓存版本。

我的问题是:是否可以创建一个 Web 资源(例如在 uri /invalidateIndex),这样当用户点击该资源时,他会以强制浏览器使其缓存无效并询问服务器的方式重定向到索引页面新鲜的内容?

4

2 回答 2

1

我自己的项目也有类似的问题,所以如果您还没有找到解决方案,我有一些建议......

  1. 我认为这是 jQuery 强制 ajax 请求不被缓存的一种方式:它使用随机值或名称向 URL 添加一个 HTTP 参数,以便每个新请求都有一个不同的 URL,然后浏览器从不使用缓存. 您实际上可以将 /invalidateIndex URI 重定向到这样的 URL。问题当然是浏览器实际上永远不会使原始索引 URL 无效,并且浏览器总是会重新请求您的索引。

  2. 您当然可以使用较小的 max-age 更改 http 标头 Cache-Control,例如减少到一个小时,以便缓存每小时左右失效

  3. 此外,您可以使用ETags,其中缓存的数据具有将随每个请求一起发送的标签,本质上是询问服务器索引是否已更改。

2、3甚至可以组合我认为...

于 2011-05-20T10:59:58.140 回答
-1

没有直接的方法要求浏览器清除特定文件的缓存,但如果您只有几个这样的系统和足够的带宽,您可以尝试在相同的协议、主机和端口上返回大型对象,以便缓存开始驱逐旧对象。例如,请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=81640

于 2011-02-21T07:27:37.990 回答