HTTP内容编码:gzip无法识别且内容长度错误

时间:2013-08-18 21:38:21

标签: node.js http google-chrome fiddler

我正在开发一个nodeJS代理,并且偶然发现了谷歌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);

文件'test'包含一些虚拟HTML,filesize大约是90KB。 它测试代码如下:

$ curl localhost:8000 | gunzip

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

问题

enter image description here

这是gzipped响应的一个screeonshot。 大小内容值几乎相同。 但我希望收到的gzip压缩内容(大小)要比解压缩的内容小得多(内容)。

另外,我没有看到预期的“Content-Encoding:gzip”标头。 “Content-Length”标题显示未压缩文件的长度。如果我通过Fiddler

管道HTTP流量,我会得到相同的结果

enter image description here

此URL产生过期行为:

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

enter image description here

那么,我做错了什么?

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

1 个答案:

答案 0 :(得分:0)

天啊,我让它运转了! 我不知道为什么,但今天我启动了我的Windows开发机而不是Ubuntu。

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

我想要恢复6小时的生活。