Firefox在304之后没有使用缓存的文件副本

时间:2011-05-11 12:44:32

标签: http firefox iis http-headers

我在Firefox中看到一种行为,这在我看来是出乎意料的。这不是特别可重复的(不幸的是),但确实不时出现。 一旦启动,它就可以重复刷新页面,直到完全刷新(ctrl-f5)完成。上一次,我设法得到了一个痕迹。

基本上,FF4.0.1正在请求资源(来自在IIS7下运行的ASP.NET MVC 3应用程序):

GET http://www.notarealdomain.com/VersionedContent/Scripts/1.0.40.5653/jquery.all.js HTTP/1.1
Host: www.notarealdomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: */*
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Referer: http://www.notarealdomain.com/gf
If-Modified-Since: Sat, 01 Jan 2000 00:00:00 GMT

然后它从服务器获得以下响应(通过代理,但我可以在IIS服务器日志中看到请求一直到服务器):

HTTP/1.1 304 Not Modified
Date: Mon, 09 May 2011 14:00:47 GMT
Cache-Control: public
Via: 1.1 corp-proxy (NetCache NetApp/6.0.3P2D5)

这似乎是合理的 - 客户端发出条件请求(if-modified-since),服务器响应“ok - 使用你的副本”(304 Not Modified)。

问题是,在这种情况下客户端不会打开文件 - 它表现得好像没有内容(即如果是图像,它不会出现,如果js的行为就像.js文件一样在页面上缺少,如果.css然后页面呈现没有css样式等)。这在网页本身以及使用优秀的HttpWatch工具时都很明显。 HttpWatch清楚地表明浏览器确实有缓存中的项目,但没有将其用作内容源。

我在这里缺少什么?上面的对话似乎是合理的,那么为什么FF会发出条件请求,然后在被告知这样做时不使用它的缓存副本?如果然后按ctrl-F5强制完全刷新,行为就会消失,只会偶尔返回。

我们也有一些轶事证据表明FF3和Chrome也会出现这种情况,但我们还没有用任何法医数据证实这一点。

有没有其他人看过这个,有没有人知道可能会出现什么问题,或者有哪些进一步的措施可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

好的 - 我已经解决了这个问题的根源。一如既往 - 答案就是盯着我的脸!

问题不在于缓存行为。该系统的另一部分偶尔会失败并写出零长度文件 - 该文件正在被Firefox缓存。

因此,当Firefox向服务器发送条件请求并收到304 / Not Modified时,它尽职尽责地使用了它在缓存中找到的文件的损坏零长度版本。

所有迹象都让我看到 - 它只花了一点时间到达那里:)

全体感谢您的意见和建议。