【发布时间】:2013-08-18 21:38:20
【问题描述】:
我正在开发一个 nodeJS 代理,偶然发现了 Google Chrome 的一个奇怪行为,我也可以在 Fiddler 中重现。
如果我将压缩后的内容发送到浏览器,它无法识别不同的压缩/解压缩内容大小。但内容仍然显示正确。
这里有一小段代码重现问题:
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,文件大小约为 90KB。 它像这样测试代码:
$ curl localhost:8000 | gunzip
这工作正常,所以我认为 nodeJS 代码是正确的。
问题
这是压缩后响应的屏幕截图。 Size 和 Content 值几乎相同。 但我希望收到的 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 代码是否发送了错误的响应?
【问题讨论】:
-
清除缓存?其他代码没有显示?对我来说很好。
-
这是我执行的唯一代码。缓存被完全禁用。我很高兴听到它对你有用。您是否运行任何特殊的 beta/不稳定版本的 node 或 Chrome?
-
如果 Fiddler 显示内容未经过 GZIP 压缩(并且您尚未在 Fiddler 的工具栏中启用 DECODE 选项),则该内容未经过 GZIP。
标签: node.js http google-chrome fiddler