我想将一个文件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);
答案 0 :(得分:0)
更改
gzippedData = buffer.toString('binary');
到
gzippedData = buffer;
你应该好好去!
编辑:这是因为res.write
默认情况下会将响应编码为utf8
。您可以将其更改为res.write(gzippedData, 'binary')
,但这是不必要的。只保留对缓冲区的引用而不是分配js字符串并再次对其进行编码会更便宜。