我想对一个文件进行 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')
,但这是不必要的。只保留对缓冲区的引用而不是分配 js 字符串并再次对其进行编码会更便宜。
关于node.js - 对来自 Nodejs 服务器的响应进行 Gzip 压缩时出现错误 330,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468122/