node.js - 对来自 Nodejs 服务器的响应进行 Gzip 压缩时出现错误 330

标签 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);

最佳答案

改变

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/

相关文章:

javascript - 使用 Graphql 时在 Mongoose 模式中填充 "Ref"

node.js - 保存父级时,Sequelize 自动保存关联对象

javascript - Promise 合并流

tomcat - 响应 header 中没有内容编码

laravel - 入口 API {"error_message":"You must support\u0027gzip\u0027 to use F13"}

python - 如何膨胀gzipped,base64d字符串

Javascript - 避免调用多个 array.filters

python - 聊天网站背后的想法

c++ - 使用 libarchive 将 gzip 文件解压到内存

c - 用 C 打开并读取 "large"gzip 压缩文件