IE浏览器-使用后退按钮:IE和Safari不读取缓存,而Firefox和Chrome可以



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

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

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

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

请求头

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

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

IE9及更早版本将不会缓存带有"no-cache"头。对于IE10和更高版本,缓存的响应将被有条件地验证,或者在后退/前进导航的情况下不经过验证就从缓存中取出(参见IEInternals)

IE9修复了这方面的一些问题;

IE的问题是Vary头条目。特别是在IE中禁止缓存的Cookie条目。多亏了Eric提到的博客文章,我才能确定问题所在。

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

最新更新