我在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也会发生这种情况,但我们还没有用任何取证数据证实这一点。
有没有人看到这一点,有谁知道可能出了什么问题,或者有什么进一步的步骤可以隔离问题?
好的 - 我找到了这个问题的根源。一如既往 - 答案是盯着我的脸!
问题根本不在于缓存行为。系统的另一部分偶尔出现故障并写出一个零长度的文件 - 该文件由 Firefox 缓存。
因此,当 Firefox 向服务器发送有条件的请求并收到它的 304/未修改时,它尽职尽责地关闭并使用了在其缓存中找到的文件的损坏零长度版本。
所有的迹象都在那里让我看到 - 只是花了一点时间到达那里:)
谢谢大家的意见和建议。