为什么 Firefox 忽略网络服务器发送的“304 Not Modified”状态?

为什么 Firefox 忽略网络服务器发送的“304 Not Modified”状态?

对于我的网站,Firefox 32.0 似乎不会缓存我安装的 Nikola 7.1.0 的 CSS 文件,并忽略了304 Not ModifiedWeb 服务器的响应。令我困惑的是,它发送了带有不同Accept:标头的第二个请求。

Chrome 37.0 不会出现这种行为,并且仅请求该文件一次。

Firefox 发送的第一个 HTTP 请求是:

GET /assets/css/all-nocdn.css HTTP/1.1
Accept:  text/css,*/*;q=0.1
Accept-Encoding:  gzip, deflate
Accept-Language:  en-GB,en;q=0.5
Authorization:  …
Cache-Control:  max-age=0
Connection:  keep-alive
Host:  …
If-Modified-Since:  Mon, 14 Jul 2014 09:12:55 GMT
If-None-Match:  "2838446235"
Referer:  …
User-Agent:  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0



HTTP/1.1 304 Not Modified
Content-Type: text/css
Date: Fri, 12 Sep 2014 07:18:02 GMT
ETag: "2838446235"
Last-Modified: Mon, 14 Jul 2014 09:12:55 GMT
Server: lighttpd/1.4.35
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Vary: Accept-Encoding

下一个 HTTP 请求是:

GET /assets/css/all-nocdn.css HTTP/1.1
Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:  gzip, deflate
Accept-Language:  en-GB,en;q=0.5
Authorization:  …
Cache-Control:  no-cache
Connection:  keep-alive
Host:  …
Pragma:  no-cache
User-Agent:  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0



HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 22700
Content-Type: text/css
Date: Fri, 12 Sep 2014 07:26:42 GMT
ETag: "2838446235"
Last-Modified: Mon, 14 Jul 2014 09:12:55 GMT
Server: lighttpd/1.4.35
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Vary: Accept-Encoding


(我实际上用HTTPie,因为 Firefox 不允许复制整个服务器响应。可以通过单击“编辑并重新发送”来复制请求标头。)

这种行为可能是什么原因造成的?Firefox 是否提供了一种查看 HTTP 请求原因的方法?(Chrome 称之为“发起者”。)

请查看我的Firefox 开发者工具栏网络部分的屏幕截图查看时间线中所有请求的概览:
Firefox 开发者工具栏网络部分的屏幕截图

相关内容