Http 为什么Firefox不发送If-Modified-Since头?

Http 为什么Firefox不发送If-Modified-Since头?,http,firefox,http-headers,browser-cache,Http,Firefox,Http Headers,Browser Cache,根据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, 0

根据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,而是再次发送整个资源

这发生在Firefox14中,我认为这可能是一个bug,所以我升级了。但Firefox15中仍然存在这种情况。铬没有问题


我试过使用和不使用“Expires”标题,没有区别。Firefox只是拒绝发送If-Modified-Since标题。

好吧,我觉得自己像个傻瓜,但决定把我的骄傲放在一边,而不是仅仅删除这个问题,告诉大家解决方案是什么,以防其他人也做过同样的事情


从前,为了测试一些东西,我关闭了Firefox中的缓存。我重新打开它,现在它正在发送标题。

对我来说,问题是我发送的响应中上次修改的日期不完全是RFC 1123。铬不介意;如果自标题修改后,它很高兴地将格式错误的时间戳发送回
。然而,Firefox却悄悄地忽略了这一点

我可以从你的标题中看出,这并不是你的问题的原因,但无论如何,我会发布这个答案,因为我花了一段时间才意识到这是问题所在,也许有一天,其他人也会有同样的问题


这是在Linux、FWIW(确切地说是Mint 17)下,但我认为这两种浏览器在其他操作系统下的行为方式相同。

导致firefox不缓存请求的另一个原因是磁盘已满。至少在OSX上

这是额外令人费解的,因为此时safari仍然正确地缓存请求,而firefox至少可以将请求缓存在内存中


清除缓存并在磁盘上腾出一些空间会有所帮助。

对我来说,这是因为当我从地址栏加载站点时,Firefox(ESR 60.4.0)没有为某些资源(如CSS、JS)发送“如果修改”或“如果不匹配”标题

然而,当请求使用“ctrl+r”重新加载时,它发送了两个头,但资源仍然使用“200OK”重新加载,即使它们本应返回“304未修改”

经过一些跟踪,我发现这是由于Apache2.4.25 deflate模块造成的。如果资源被压缩,它们实际上不会被缓存(也就是说,它们将在下次访问时重新加载),事实证明,这是由于ETag在使用deflate时的处理

因此,对我来说,最合理的选择是使用“filetag None”,而现在,当我使用“ctrl-r”时,即使对于压缩文档,我也正确地得到了“304”


令人惊讶的是,即使在那之后,它仍然显示绿色的“200OK”,表示CSS和JS的完整检索(并且在详细的“请求头”面板中没有“如果修改过,则自”),这让我发疯,直到我发现这个专栏有时是伪造的(还有另一个专栏名为“转移的”,如果它说“cached”而不是字节数,这意味着firefox实际上从内部缓存中获取了值,而不是从显示的网络“200 OK”请求中获取的值。检查服务器端的访问日志确认当时没有网络活动,因此该部分只是坏UI)

FWIW,在Firefox中,如果响应设置为随更改而变化的任何请求头,Firefox将不会在(错误头)下发送if-Modified-Since头理论上,服务器可能会误解它并返回一个304而不评估不同的请求头。我发现了相同的结果。我通过Firebug的网络面板上的复选框关闭了缓存。检查
关于:缓存
-Oof!对我也有帮助!关闭Firebug的网络面板中的复选框时,我也会把事情弄得一团糟。EmFirefox首选项的缓存问题解决了。刚刚给了你第13次投票。我很高兴诚实为你付出了代价。:-)又一次投票。因为我做了同样的事情,这正是我需要的答案!投票吧,因为讨厌的网络实验室需要浏览器来完成。正确!这正是我一直试图解决的问题我也是。谢谢@Matija Nalis。你证实了我自己对Firefox如何处理这个输出的怀疑。