我正在开发一个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代码是正确的。
问题
这是gzipped响应的一个screeonshot。 大小和内容值几乎相同。 但我希望收到的gzip压缩内容(大小)要比解压缩的内容小得多(内容)。
另外,我没有看到预期的“Content-Encoding:gzip”标头。 “Content-Length”标题显示未压缩文件的长度。如果我通过Fiddler
管道HTTP流量,我会得到相同的结果
此URL产生过期行为:
http://www.heise.de/js/jquery/jquery-1.7.1.min.js
那么,我做错了什么?
为什么Chrome显示错误的尺寸? 或者nodeJS代码是否发送了错误的响应?
答案 0 :(得分:0)
天啊,我让它运转了! 我不知道为什么,但今天我启动了我的Windows开发机而不是Ubuntu。
看起来,Chrome for Windows无法正确显示或处理响应。 在Ubuntu下,它在第一次尝试时起作用。
我想要恢复6小时的生活。