1

我正在开发一个 nodeJS 代理并偶然发现了 Google Chrome 的一个奇怪行为,我也可以在Fiddler中重现它。

如果我将 gzip 压缩的内容发送到浏览器,它不会识别不同的压缩/解压缩内容大小。但是内容仍然正确显示。

这里有一小段代码来重现这个问题:

var http         = require('http'),
    zlib         = require('zlib'),
    fs           = require('fs');


var Proxy = http.createServer(function(request, response) {
        var raw = fs.createReadStream('test');
        response.writeHead(200, {
                'content-encoding': 'gzip',
        });

        raw.pipe(zlib.createGzip()).pipe(response);
});

Proxy.listen(8000);

文件“测试”包含一些虚拟 HTML,文件大小约为 90KB。它像这样测试代码:

$ curl localhost:8000 | gunzip

这工作正常,所以我认为 nodeJS 代码是正确的。

问题

在此处输入图像描述

这是压缩响应的屏幕截图。大小和内容值几乎相同。但我希望收到的 gzip 压缩内容(Size )比解压缩的内容( Content )小得多。

此外,我没有看到预期的“Content-Encoding: gzip”标头。“Content-Length”标头显示了未压缩文件的长度。如果我通过Fiddler管道传输 HTTP 流量,我会得到相同的结果

在此处输入图像描述

此 URL 产生预期的行为:

http://www.heise.de/js/jquery/jquery-1.7.1.min.js

在此处输入图像描述

那么,我做错了什么?

为什么 Chrome 显示错误的尺寸?或者 nodeJS 代码是否发送了错误的响应?

4

1 回答 1

0

天哪,我搞定了!我不知道为什么,但今天我启动到我的 Windows 开发机器而不是 Ubuntu。

看起来,Windows 版 Chrome 无法正确显示或处理响应。在 Ubuntu 下,它在第一次尝试时就可以工作。

我想要6个小时的生命回来。

于 2013-08-18T22:28:11.360 回答