以下是我的Web应用程序中页面的请求和响应标题:
请求标题:
GET http://my-server/myapp/mypage.aspx?myid=123 HTTP/1.1 Accept: */* Accept-Language: en-US User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) UA-CPU: AMD64 Accept-Encoding: gzip, deflate Host: my-server Connection: Keep-Alive Pragma: no-cache Cookie: <sanitized>
响应标题:
HTTP/1.1 200 OK Cache-Control: private Content-Length: 173788 Content-Type: text/html; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET Date: Thu, 15 Jul 2010 17:48:25 GMT
IE8和Firefox似乎忽略了这个页面的caching副本。 每次浏览器发送相同的无条件请求,每次我加载页面。 我已经证实,IE8至lesscaching“临时Internet文件”目录中的响应。
据我所知, Cache-Control: private应该指示两个浏览器caching响应。 由于没有过期的信息,他们应该发送条件请求来validationcaching的副本以备以后的请求,但是这不会发生。 有没有一些浏览器级的启发式拒绝caching的副本(或者根本不能阻止caching)? 或者是我对标题的理解完全错误?
涉及的Web服务器是在Windows 7 Enterprise上运行的IIS 7.5。 浏览器是IE 8和Firefox 3.6.6,作为pipe理员在与IIS相同的机器上运行(请求的是机器的主机名,而不是本地主机)。
有趣的是,IE9平台预览版3甚至不发送条件请求 – 它盲目地重用了caching副本!
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1表示“私有(非共享)caching可以caching响应。”
我猜一切都是可能的,你只能确定,页面不会caching在公共caching中,而不是页面将被caching
尝试使用Expires标题进行响应。