根据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
我点击了然后点击返回,以下是发送到服务器的请求标头:
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,而是再次发送整个资源。
这在Firefox 14中发生,我认为它可能是一个错误,所以我升级了。但它仍然在Firefox 15中发生.Chrome没有问题。
我已尝试使用和不使用“Expires”标头,它没有任何区别。 Firefox只是拒绝发送If-Modified-Since标头。
答案 0 :(得分:33)
好吧,我觉得自己像是一个doofus,但我决定把我的骄傲放在一边,而不是仅仅删除这个问题,告诉解决方案是什么,万一其他人做过同样的事情......
曾几何时,为了测试某些东西,我在Firefox中关闭了缓存。我把它重新打开了,现在它正在发送标题。
答案 1 :(得分:2)
对我而言,问题原因是我发送的回复中的Last-Modified
日期并不完全是RFC 1123.Chrome并不介意;它很高兴地将我的格式错误的时间戳发回If-Modified-Since
标题。然而,Firefox却默默地忽略了它。
我可以从你的标题中看到这不是你原因的原因,但无论如何我都会发布这个答案,因为我花了一段时间才意识到这是问题,也许,有一天,其他人会有同样的问题。
这是在Linux,FWIW(准确地说是Mint 17)但我希望这两种浏览器在其他操作系统下的行为方式相同。
答案 2 :(得分:0)
可能导致firefox不缓存请求的另一个原因是磁盘已满。至少在OSX上。
这是令人费解的,因为那时的safari仍能正确缓存请求,而firefox因为至少可以将请求缓存在内存中。
清除缓存并在磁盘上留出一些空间会有所帮助。
答案 3 :(得分:0)
对我来说,这是Firefox(ESR 60.4.0)没有发送“ If-Modified-Since ”或“ If-None-Match ”标头当我从地址栏加载网站时获得一些资源(例如CSS,JS)。
但是,当请求使用“ ctrl + r”重新加载时,它正在发送两个标头,但是仍然使用“ 200 OK ”重新加载了资源,即使它们应该已经返回了“ 304”未修改”
经过一些跟踪,我发现这是由于Apache 2.4.25 deflate模块引起的。如果资源被压缩,则它们实际上将不会被缓存(也就是说,它们将在下次访问时重新加载)。 When looking more into it,原来是由于使用deflate时的ETag处理。
所以对我来说,最合理的选择是使用“ FileETag None ”,现在即使执行“ ctrl-r”,即使对于压缩文档,我也可以正确获得“ 304”。
令人惊讶的是,即使在此之后,它仍然显示绿色“ 200 OK ”,表示已完全检索CSS和JS(详细信息中没有“ If-Modified-Since ”请求标头”面板)使我发疯,直到我发现此列有时被 FAKED (伪造)(还有另一列称为“ Transferred ”,如果它显示为“ < “ strong> cached ”(而不是字节数),这意味着Firefox实际上是从内部缓存而不是从网络显示的“ 200 OK”请求中获取了该值。在服务器端检查access_log确认没有网络活动,然后,因此该部分只是不良的UI)