2013-08-18 54 views
1

我正在开发一个nodeJS代理,并偶然发现了Google Chrome的一个奇怪行为,我也可以在Fiddler中重现该行为。HTTP内容编码:gzip无法识别和错误内容长度

如果我将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是正确的。

的问题

enter image description here

这是gzip压缩响应的screeonshot。 尺寸内容值几乎相同。 但我预计将接收的gzip内容(大小)要小得多,然后解压缩的内容(内容)。

此外,我没有看到预期的“Content-Encoding:gzip”标题。 “Content-Length”标题显示了未压缩文件的长度。我得到同样的结果,如果我管通过Fiddler

enter image description here

这个URL产生expceted行为的HTTP流量:

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

enter image description here

所以,我在做什么错误?

为什么Chrome显示大小错误? 或者nodeJS代码发送错误的响应?

+0

清除缓存?其他代码没有显示?对我来说工作得很好。 –

+0

这就是我执行的唯一代码。缓存完全禁用。我很高兴听到它适合你。你是否运行任何特殊的beta/unstable版本的节点或Chrome? –

+0

如果Fiddler显示内容不是GZIP(并且您还没有在Fiddler的工具栏中启用DECODE选项),那么内容不会被GZIP处理。 – EricLaw

回答

0

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

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

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