Windows 7 64 位操作系统上的浏览器无法获取压缩页面

Windows 7 64 位操作系统上的浏览器无法获取压缩页面

我在工作时使用 Windows 7 64 位 PC 时遇到了一个奇怪的问题。我管理一些提供 gzip 压缩内容(js、css、html)的 Linux Web 服务器。奇怪的行为是,当我系统中的所有浏览器(Firefox、Chrome、Vivaldi)从这些 Linux 服务器请求内容时(我可以Accept-Encoding: gzip,deflate清楚地看到标头),它们无法获取内容。所有响应都带有Transfer-Encoding: chunked,因此内容未压缩。但是,curl在命令行中使用--compressed选项运行时,响应带有Content-Type: gzipContent-Length标头,并且按预期进行了 gzip 压缩。在 Windows 2008 R2 服务器中,内容以 gzip 压缩形式提供。

可以保证,在这些 Linux 网络服务器上以 gzip 压缩的形式提供内容可以正常工作。

其中涉及 pfSense 代理,但即使我在代理设置中覆盖它,以便浏览器直接从 Linux 服务器请求内容,行为也是一样的。无论有没有代理,都没有变化。

我使用另一台 Windows 7 64 位 PC 确认了 Firefox 和 Chrome 的问题。因此,我得出结论,操作系统在某种程度上与这种奇怪的浏览器行为有关。

有人可以证实……吗?

答案1

这可能会产生欺骗:为了在一条消息中发送经过 gzip 压缩的文件,服务器需要提供整个文件并知道其大小,而这在您的情况下显然不会发生,正如您自己所说的那样:

在命令行使用该--compressed选项运行 curl,响应附带Content-Type: gzip标题,Content-Length并且按照预期进行 gzip 压缩。

我认为你的情况是服务器管道将输出传送到 gzip,然后将结果直接传送到浏览器,而无需先将数据写入磁盘以计算文件大小。由于事先不知道大小,服务器别无选择,只能返回包含Transfer-Encoding: chunked尽可能多的可用部分的流。

当数据可用时,它将以块的形式返回,以便浏览器重新组装。但是,即使是以块的形式接收,接收到的数据仍会被 gzip 压缩。

相关内容