我的 Windows 7 64 位 PC 在工作时遇到一个奇怪的问题。我管理着一些 Linux 网络服务器,这些服务器提供压缩内容(js、css、html)。奇怪的行为是,当我系统中的所有浏览器(Firefox、Chrome、Vivaldi)都从这些 Linux 服务器请求内容时(我可以Accept-Encoding: gzip,deflate
很好地看到标题),他们没有得到它。所有回复都带有Transfer-Encoding: chunked
,因此不会压缩内容。但是,curl
在带有该选项的命令行中运行时--compressed
,响应会带有标头,Content-Type: gzip
并且Content-Length
会按照预期的方式进行 gzip 压缩。从 Windows 2008 R2 服务器,内容以 gzip 压缩的形式提供。
以 gzip 压缩的形式提供内容在那些 Linux Web 服务器上运行良好,这是有保证的。
涉及 pfSense 代理,但即使我在代理设置中覆盖它以便浏览器直接从 Linux 服务器请求内容,行为也是一样的。没有变化,有或没有代理。
我在另一台 Windows 7 64 位 PC 上确认了 Firefox 和 Chrome 的问题。因此,我得出的结论是操作系统以某种方式参与了这种奇怪的浏览器行为。
有人可以确认...吗?
这可能是骗人的:为了在一条消息中发送 gzipp'ed 文件,服务器需要有整个文件可用并知道它的大小,这在您的情况下显然不会发生,正如您自己所说:
我认为在您的情况下,服务器将输出通过管道传输到 gzip,然后将结果直接通过管道传输到浏览器,而无需先将数据写入磁盘以计算文件大小。事先不知道大小,服务器别无选择,只能返回一个包含
Transfer-Encoding: chunked
尽可能多的部分的流。当数据可用时,它将以块的形式返回,由浏览器重新组装。但是,接收到的数据仍然是 gzipp 压缩的,即使是以块的形式接收的。