从nodejs服务器Gzipping响应时出错330

时间:2012-02-27 16:04:44

标签: node.js gzip

我想将一个文件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);

1 个答案:

答案 0 :(得分:0)

更改

gzippedData = buffer.toString('binary');        

gzippedData = buffer;

你应该好好去!

编辑:这是因为res.write默认情况下会将响应编码为utf8。您可以将其更改为res.write(gzippedData, 'binary'),但这是不必要的。只保留对缓冲区的引用而不是分配js字符串并再次对其进行编码会更便宜。