【问题标题】:Decompress Gzip JSON response解压 Gzip JSON 响应
【发布时间】:2013-03-19 07:24:00
【问题描述】:

我正在从 Web 服务获得 GZIP 类型的压缩响应。谁能帮我解压缩或解码响应。

任何有关这方面的帮助都会非常有帮助

谢谢

【问题讨论】:

  • 你读过nodejs.org/api/zlib.html吗?
  • 是的,我尝试了网站中给出的示例。但我希望在浏览器中显示响应。我正在尝试压缩 json web 服务
  • 向我们展示您的代码。
  • http.get('/', function (req, res) { var acceptEncoding = req.headers['accept-encoding']; if (acceptEncoding.match(/\bdeflate\b/) ) { res.setHeader('content-encoding', 'deflate'); } else if (acceptEncoding.match(/\bgzip\b/)) { res.setHeader('content-encoding', 'gzip'); } console.log(res._headers); res.end('{"app_id": "A3000990"}'); //JSON 数据 }) }))
  • 只需使用requestsuperagent

标签: json node.js zlib unzip gunzip


【解决方案1】:

您似乎想使用 Express 和 express.compress 中间件。这将确定浏览器是否支持 gzip 和/或 deflate,因此您不必这样做。

一个简单的设置可能如下所示:

var express = require('express');
var app     = express();

app.use(express.compress());
app.get('/', function(req, res) {
  res.send({ app_id: 'A3000990' });
});
app.listen(3000);

如果您的数据是 JSON 字符串,您必须自己设置正确的内容类型标头:

res.setHeader('Content-Type', 'application/json');
res.send(data);

【讨论】:

  • 当我尝试在浏览器中点击 localhost:3000 时,它会显示“内容编码错误”
  • 使用 Firefox,我猜?尝试其他浏览器,还可以查看this page,这可能会帮助您在 Firefox 中解决该问题。或者尝试在另一个端口(例如 3001)上运行它。
  • Yes in Firefox Content type error is displayed while running in chrome and IE 页面无法显示。
  • 使用与我发布的完全相同的代码?我在 Chrome、Safari、IE10 和 FF 上对其进行了测试,效果很好。
  • 在我的客户端代码中,我尝试使用 connect.compress() 中间件解析 JSON 字符串。