Gzip从nodejs服务器响应时发生错误330

我想gzip文件保存在内存中,每当请求来自客户端,我想输出gzip的数据。 不过,我的浏览器收到错误消息330(我正在使用最新版本的Chrome)

下面的代码看起来很直截了当,还有什么我失踪?

var http = require('http'); var url = require('url'); var fs = require('fs'); var zlib = require('zlib'); var gzippedData = ''; //read file into memory fs.readFile('layout.html', function(err, data){ if(err) throw err; zlib.gzip(data, function(err, buffer) { if (err) throw err; gzippedData = buffer.toString('binary'); }); }); var server = http.createServer(function(req, res){ var path = url.parse(req.url).pathname; switch (path){ case '/': res.writeHead(200, {'content-encoding': 'gzip'}); res.write(gzippedData); res.end(); break; default: res.writeHead(404); res.write('404'); res.end(); }}); server.listen(8080); 

更改

 gzippedData = buffer.toString('binary'); 

 gzippedData = buffer; 

你应该很好走!

编辑:这是因为res.write将默认编码为utf8响应。 你可以改为res.write(gzippedData, 'binary') ,但这是不必要的。 只保留对缓冲区的引用,而不是再分配一个jsstring和编码,会更便宜。