我正在开发一个 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 代码是否发送了错误的响应?