【问题标题】:Using back button: IE and Safari not reading from cache whereas Firefox and Chrome do使用后退按钮:IE 和 Safari 不从缓存中读取,而 Firefox 和 Chrome 可以
【发布时间】:2020-12-02 05:51:26
【问题描述】:

当用户离开页面并在使用浏览器的后退按钮时返回该页面时,我想避免 GET 请求。在 Firefox 和 Chrome(最新版本)中无需任何特殊处理即可正常工作。

但是,Safari 和 IE 在使用后退按钮返回上一页时都会执行 GET 请求。

我摆弄了控制缓存行为(Last-Modified、Expires、Cache-Control)的标头,但没有成功。有什么建议可以在使用后退按钮时阻止 IE 和 Safari 重新加载页面?

这是一个典型的请求和响应头,在 IE 和 Safari 中使用后退按钮、重新加载页面或在地址栏中输入 URL 时是相同的。

请求标头

Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding:gzip, deflate
Accept-Language:en-US
Origin:http://165.88.162.245:8000
Referer:http://165.88.162.245:8000/login?next=/
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1

响应标头

Content-Language:en
Content-Type:text/html; charset=utf-8
Date:Tue, 12 Jul 2011 11:35:31 GMT
Server:WSGIServer/0.1 Python/2.6.6
Set-Cookie:sessionid=0675e1246fe03946c54d2052e7adf0c9; Path=/
Vary:Accept-Language, Cookie

【问题讨论】:

    标签: internet-explorer http caching browser safari


    【解决方案1】:

    具体是哪个版本的 IE?确切的 HTTP 响应标头是什么?

    IE9 和更早版本不会缓存带有“no-cache”标头的页面。对于 IE10 及更高版本,在后退/前进导航的情况下,缓存的响应将被有条件地验证或从缓存中提取而无需验证(参见IEInternals

    IE9 修复了这方面的一些问题;请阅读此IEInternals post 了解更多信息。

    【讨论】:

    • 感谢 IE9 缓存改进的链接,它为我指明了正确的方向。问题是响应中的“Vary: cookie”标头在我测试的所有 IE 化身中禁用了缓存。我仍然遇到 Safari 的问题,即使 Vary 标头丢失,它也会重新加载页面。
    • 是的,如果我没记错的话,Safari 总是重新请求顶级页面,而不管缓存指令如何,但确实尊重子下载的这些指令。
    【解决方案2】:

    IE 的问题是Varyheader 条目。特别是在 IE 中禁止缓存的 Cookie 条目。感谢 Eric 提到的博客条目,我能够确定问题。

    不幸的是,这并不能解决 Safari 中的问题。最终,我决定采用一种不同的方法,这种方法似乎要好得多。重新加载困扰我的原因是我使用它来提供对离开页面的会话状态的访问。解决方案是不依赖客户端缓存来提供此功能,而是提供独立于客户端缓存来执行重新加载会话状态任务的 URL。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2010-09-19
      • 2010-10-21
      • 1970-01-01
      • 2021-05-28
      • 2014-10-12
      相关资源
      最近更新 更多