首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Firefox没有发送If-Modified-Since报头?

为什么Firefox没有发送If-Modified-Since报头?
EN

Stack Overflow用户
提问于 2012-09-06 00:07:42
回答 4查看 5.3K关注 0票数 10

根据Firebug的说法,以下是第一次检索资源时的响应头:

代码语言:javascript
复制
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,下面是发送到服务器的请求头:

代码语言:javascript
复制
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报头。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-06 00:29:19

好吧,我觉得自己像个笨蛋,但我决定把我的自尊心放在一边,而不是直接删除这个问题,告诉我解决方案是什么,以防其他人做同样的事情……

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

票数 40
EN

Stack Overflow用户

发布于 2014-11-18 19:58:56

对我来说,问题是我发送的响应中的Last-Modified日期并不完全是RFC1123。Chrome并不介意,它很高兴地把我格式错误的时间戳发回到了If-Modified-Since头文件中。然而,火狐却悄悄地忽略了这一点。

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

这是在Linux (准确地说是Mint17)下的,但我希望这两个浏览器在其他OSes下的行为方式是相同的。

票数 4
EN

Stack Overflow用户

发布于 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不好)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12285538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档