7 javascript asp.net internet-explorer caching xmlhttprequest
我做了一个Ajax请求,在其中我设置了响应可缓存性和最后修改的头:
if (!String.IsNullOrEmpty(HttpContext.Current.Request.Headers["If-Modified-Since"]))
{
HttpContext.Current.Response.StatusCode = 304;
HttpContext.Current.Response.StatusDescription = "Not Modified";
return null;
}
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
HttpContext.Current.Response.Cache.SetLastModified(DateTime.UtcNow);
Run Code Online (Sandbox Code Playgroud)
这按预期工作.我第一次发出Ajax请求200 OK.我第二次得到304 Not Modified.
当我在Chrome中刷新硬盘(Ctrl + F5)时,我觉得200 OK很棒!
当我在Internet Explorer/Firefox中进行硬刷新时,我得到了304 Not Modified.但是,每个其他资源(JS/CSS/HTML/PNG)都会返回200 OK.
原因是因为无论这些浏览器中的硬刷新如何,都会为XMLHttpRequest发送"If-Not-Modified"标头.我相信Steve Souders 在这里记录它.
我试过设置一个ETag并调整"If-None-Match"无济于事(在Steve Souders页面的评论中提到过).
这里有没有人有任何智慧的宝石?
谢谢,本
更新
我可以针对存储的上次修改日期检查"If-Modified-Since".但是,希望这个问题能够帮助那些发现标题设置不正确的其他SO用户.
更新2
虽然每次都使用"If-Modified-Since"标头发送请求.如果未设置到期日期或将其设置为将来日期,Internet Explorer甚至不会发出请求.无用!
更新3
这也许现在是一个实时博客.当localhost时,Internet Explorer不会打扰第二个请求.使用真实IP或环回将起作用.
在 IE10 之前,IE 不应用刷新标志(请参阅http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about-conditional-http-requests-and-the -refresh-button.aspx ) 来处理不是作为文档加载的一部分发出的请求。
如果需要,您可以调整目标 URL 以包含随机数,以防止缓存的副本满足未来的请求。或者,您可以发送 max-age=0 来强制 IE 在每次重用之前有条件地重新验证资源。
至于为什么浏览器会重用未指定生存期的缓存资源,请参见http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer -9.aspx
| 归档时间: |
|
| 查看次数: |
7436 次 |
| 最近记录: |