浏览器缓存 - 为什么IE9在没有进入网络的情况下总是显示http 304?

时间:2012-01-20 03:05:33

标签: http internet-explorer-9 fiddler browser-cache

我正在尝试正确设置缓存,并将Expires标头设置为将来365天正常工作但未在IE9中正确显示。有谁知道为什么?

当您访问IE9中的任何网站(例如www.google.com)时,请点击地址栏中的Enter键以使用完全缓存重新访问它,它会显示很多额外的304,Fiddler没有显示。

查看网络检查器选项卡(在F12上),IE9显示它已收到针对CSS和JS文件的304 Not Modified响应和3张图像(可能是大约在过去一个月内修改日期的图像 - 其他30张未显示的图像是以上)。

但是,根据Fiddler的说法并查看我正在开发的网站上的服务器上的IIS日志,它实际上并没有提出这些请求。 IE9网络时间线将这些灰色302显示为无等待时间和&#34; <1 ms&#34;响应时间 - 如果我点击F5,它们也是灰色的302s,但显示为等待和下载时间的几毫秒(并且它们击中了网络)。

那么为什么IE9网络检查员认为它发布了这些条件请求呢?在它到达Fiddler之前,它是否实际发出了某个网络堆栈中满足的请求?

Chrome会将所有请求(包括所有图片)显示为灰色200(来自缓存),而不是页面本身(黑色200)(根据Fiddler和IIS日志,这是正确的)。

Firebug为CSS和JS显示灰色200 OK,奇怪的是只有一个图像(也正确,假设灰色200表示来自缓存 - 但为什么只显示这些资源而不是所有其他图像?)

我一直在阅读Eric Lawrence关于IE9缓存和网络堆栈的博文,但他没有提到这种奇怪的行为。

1 个答案:

答案 0 :(得分:23)

要明确的是,如果你在Fiddler中没有看到它,它就没有进入网络。

IE网络选项卡有许多错误 - 其中之一是它很难区分本地满足的缓存命中(例如没有网络命中)和需要与服务器重新验证的缓存命中(例如304) 。

这是因为缓存在WinINET中服务,远低于网络选项卡,它位于URLMon之上。

话虽如此,这是您可能想要查看的另一个参考:IEInternals Blog on Conditional Requests