【问题标题】:Error loading webpage while parsing JSON-string解析 JSON 字符串时加载网页时出错
【发布时间】:2013-03-19 09:47:12
【问题描述】:

请查看我尝试使用 connect.compress 中间件压缩数据的代码。如何在浏览器中解析 JSON 字符串以获取解压缩数据。当我尝试访问 localhost:2080 时,出现页面加载错误。

客户端代码

var options = {
host: '127.0.0.1',
port: 2080,
path: "/",
headers:{
'accept-encoding': 'gzip'
}
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
var data = '';
res.on('data', function (chunk) {
data += chunk;  
});
res.on('end', function (chunk) {
var data2 = JSON.parse(data);
console.log(data2.app_id);
});
});

服务器代码

app = connect();
app.use(connect.compress(console.log("compressed data")))
app.use(connectDomain())
.use(connect.query())
.use(connectRoute(function (router) {

router.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.setHeader('Content-Type', 'application/json');
            res.end('{"app_id": "A3000990"}');
            })
            }))

.use(function(err, req, res, next) {
    res.end(err.message);
  });

http.createServer(app).listen(2080);

我们无法控制浏览器。它要么发送 Accept-encoding: gzip, deflate header,要么不发送。那么我们可以使用 connect.compress() 获取压缩数据吗?

任何帮助都会非常有帮助

谢谢

【问题讨论】:

  • 它可以在浏览器中使用吗?服务器输出是什么?
  • 在 Firefox 中没有显示内容编码错误。在 chrome 和 IE 中无法加载页面。但在控制台中,结果正如预期的那样。

标签: json node.js connect zlib gunzip


【解决方案1】:

这里有几个问题:

  • 您在服务器中设置Content-Encoding 标头,但也使用connect.compress,这也将设置该标头。这可能会产生冲突,所以不要自己添加这些标头,让connect.compress 处理所有压缩;
  • 您实际上并未在客户端中发送 HTTP 请求,请将 req.end() 添加到其中;
  • 没有尝试在您的客户端解压缩压缩数据;怎么做can be found here;

【讨论】:

  • 我们无法控制浏览器。它要么发送 Accept-encoding: gzip, deflate header,要么不发送。那么我们可以使用 connect.compress() 获取压缩数据吗?
  • 什么意思?无论如何总是压缩?
  • 是的,总是应该压缩响应,因为我们无法从客户端控制浏览器。我们的工作是配置服务器,使其在浏览器可以处理的情况下返回压缩内容,从而为每个人节省带宽。
  • express.compress 就是这样做的,如果浏览器可以处理,它会返回压缩数据。
  • 是的,很抱歉造成混淆,它们本质上是一样的。
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2011-12-16
  • 2018-04-16
相关资源
最近更新 更多