IE 8 和客户端缓存
Posted
技术标签:
【中文标题】IE 8 和客户端缓存【英文标题】:IE 8 and client-side caching 【发布时间】:2012-01-11 00:04:59 【问题描述】:背景故事:
我在 IIS 6 Web 服务器上有一个 .NET 3.5 的 Web 门户。目前有一个页面被赋予了一个值,并基于该值在 Web 服务上查找 PDF 文件,并在网页的另一个选项卡中向用户显示结果。这是通过以下代码完成的。
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Clear();
context.Response.AddHeader("Accept-Header", pdfStream.Length.ToString());
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(pdfStream.ToArray());
context.Response.Flush();
这行得通,并且已经工作了多年。但是,我们从客户端收到了一个问题,即特定客户端每次都将 PDF 作为相同的 PDF 返回,直到他们清除临时 Internet 缓存。
我觉得很酷,这很简单。我只会将缓存标头添加到响应中以从不缓存它。所以我添加了以下内容:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);//IE set to not cache
context.Response.Cache.SetNoStore();//Firefox/Chrome not to cache
context.Response.Cache.SetExpires(DateTime.UtcNow); //for safe measure expire it immediately
经过快速测试,我得到了响应标头中的预期结果。
Cache-Control no-cache, no-store
Pragma no-cache
Expires -1
问题:
所以这上线了。第一天一切看起来都很酷。第二天,bam,每个人都开始出现白屏,没有显示 PDF。经过进一步调查,我发现它只是 IE 6,7,8。 Chrome 很好,Firefox 很好,Safari 很好,甚至 IE 9 也很好。在不知道为什么会发生这种情况的情况下,我恢复了我的更改并部署了它,一切又开始工作了。
我已经搜索了所有内容,试图找出为什么我的缓存标头似乎混淆了 IE 6-8 无济于事。有没有人遇到过 IE 6-8 的此类问题?有什么我想念的吗?感谢您提供任何见解。
【问题讨论】:
【参考方案1】:我找到了解决方案。这是给我的提示。 Here is a link
如果 IE8(及更低版本)具有 no-cache
或 store-cache
,则基本上 IE8(及更低版本)的 Cache-Control 标头存在问题。我基本上只允许私有缓存并将最大期限设置为非常短,因此它几乎立即过期,从而解决了这个问题。
//Ie 8 and lower have an issue with the "Cache-Control no-cache" and "Cache-Control store-cache" headers.
//The work around is allowing private caching only but immediately expire it.
if ((Request.Browser.Browser.ToLower() == "ie") && (Request.Browser.MajorVersion < 9))
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Cache.SetMaxAge(TimeSpan.FromMilliseconds(1));
else
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);//IE set to not cache
context.Response.Cache.SetNoStore();//Firefox/Chrome not to cache
context.Response.Cache.SetExpires(DateTime.UtcNow); //for safe measure expire it immediately
【讨论】:
感谢您发布此信息。我浪费了很多时间和很多挫折来试图弄清楚这一点。以上是关于IE 8 和客户端缓存的主要内容,如果未能解决你的问题,请参考以下文章