我正在开发一个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是正确的。
的问题
这是gzip压缩响应的screeonshot。 尺寸和内容值几乎相同。 但我预计将接收的gzip内容(大小)要小得多,然后解压缩的内容(内容)。
此外,我没有看到预期的“Content-Encoding:gzip”标题。 “Content-Length”标题显示了未压缩文件的长度。我得到同样的结果,如果我管通过Fiddler
这个URL产生expceted行为的HTTP流量:
http://www.heise.de/js/jquery/jquery-1.7.1.min.js
所以,我在做什么错误?
为什么Chrome显示大小错误? 或者nodeJS代码发送错误的响应?
清除缓存?其他代码没有显示?对我来说工作得很好。 –
这就是我执行的唯一代码。缓存完全禁用。我很高兴听到它适合你。你是否运行任何特殊的beta/unstable版本的节点或Chrome? –
如果Fiddler显示内容不是GZIP(并且您还没有在Fiddler的工具栏中启用DECODE选项),那么内容不会被GZIP处理。 – EricLaw