根据Firebug的说法,以下是第一次检索资源时的响应头:
Accept-Ranges bytes
Cache-Control public, max-age=86400
Content-Language en
Content-Length 232
Content-Location http://localhost/myapp/cacheTest.html
Content-Type text/html; charset=WINDOWS-1252
Date Wed, 05 Sep 2012 15:59:31 GMT
Last-Modified Tue, 01 May 2012 05:00:00 GMT
Server Restlet-Framework/2.0.3
Vary Accept-Charset, Accept-Encoding, Accept-Language, Accept我单击离开,然后单击back,下面是发送到服务器的请求头:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Host localhost
Referer http://localhost/myapp/cacheTest2.html
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0因此,很自然,服务器不能像我想要的那样发送304,而是再次发送整个资源。
这是在Firefox14中发生的,我认为这可能是一个bug,所以我升级了。但在Firefox15中仍然会出现这种情况,Chrome没有任何问题。
我已经尝试过使用和不使用"Expires“头,没有区别。Firefox只是拒绝发送If-Modified- send报头。
发布于 2012-09-06 00:29:19
好吧,我觉得自己像个笨蛋,但我决定把我的自尊心放在一边,而不是直接删除这个问题,告诉我解决方案是什么,以防其他人做同样的事情……
曾几何时,为了测试一些东西,我在Firefox中关闭了缓存。我重新打开了它,现在它正在发送报头。
发布于 2014-11-18 19:58:56
对我来说,问题是我发送的响应中的Last-Modified日期并不完全是RFC1123。Chrome并不介意,它很高兴地把我格式错误的时间戳发回到了If-Modified-Since头文件中。然而,火狐却悄悄地忽略了这一点。
我可以从你们的标题中看出这不是你们的原因,但我无论如何都会发布这个答案,因为我花了一段时间才意识到这就是问题所在,也许有一天,其他人也会有同样的问题。
这是在Linux (准确地说是Mint17)下的,但我希望这两个浏览器在其他OSes下的行为方式是相同的。
发布于 2019-01-30 11:23:08
对我来说,当我从地址栏加载站点时,Firefox (ESR 60.4.0)没有为一些资源(比如CSS、JS)发送“If-Modified- site”或"If-None-Match“报头。
但是,当使用"ctrl+r“请求重新加载时,它发送了两个标头,但资源仍然使用”200OK“重新加载,即使它们应该返回"304 Not modified”
经过跟踪,我发现这是由于apache 2.4.25 deflate模块造成的。如果资源被压缩,它们实际上不会被缓存(也就是说,它们将在下一次访问时重新加载)。When looking more into it,这是由于使用deflate时的ETag处理造成的。
所以对我来说最合理的方法是使用"FileETag None",现在我正确地得到了"304“,甚至当我使用"ctrl-r”时,压缩文档也是如此。
令人惊讶的是,即使在那之后,它仍然显示绿色的“200OK”,表示对CSS和JS的完整检索(并且在详细的“请求标头”面板中没有“if --”),这让我抓狂,直到我发现这个列有时是缓存伪造的(还有一个名为"Transferred",的列,如果它显示的是"cached“而不是字节数,这意味着火狐实际上是从内部缓存中获取值,而不是从网络”200OK“请求中获取值)。检查服务器端的access_log确认当时没有网络活动,因此该部分只是UI不好)
https://stackoverflow.com/questions/12285538
复制相似问题