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

Kev*_*uli 10 firefox http browser-cache http-headers

根据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
Run Code Online (Sandbox Code Playgroud)

我点击了然后点击返回,这里是发送到服务器的请求标头:

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
Run Code Online (Sandbox Code Playgroud)

所以,当然,服务器不能像我想的那样发送304,而是再次发送整个资源.

这在Firefox 14中发生,我认为它可能是一个错误,所以我升级了.但它仍然在Firefox 15中发生.Chrome没有问题.

无论有没有"Expires"标题我都尝试过,它没有任何区别.Firefox只是拒绝发送If-Modified-Since标头.

Kev*_*uli 34

好吧,我觉得这是一个doofus,但我决定把我的骄傲放在一边,而不是仅仅删除这个问题,告诉解决方案是什么,万一其他人做过同样的事情......

曾几何时,为了测试一些东西,我在Firefox中关闭了缓存.我把它重新打开,现在它正在发送标题.

  • 我会给你一个你的诚实的upvote :) (3认同)

Mic*_*per 5

对我来说,问题在于Last-Modified我发送的响应中的日期不完全是 RFC 1123。Chrome 并不介意;它很高兴地将我格式错误的时间戳发送回If-Modified-Since标头中。然而,Firefox 却悄悄地忽略了它。

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

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