如何从Google Cloud Functions发送gzipped json响应?

时间:2018-01-17 20:49:47

标签: json node.js google-cloud-platform google-cloud-functions serverless

如果我使用gzip压缩响应,我的一个Google Cloud Functions中的JSON响应可以减少70-80%。

如何从我的函数发送压缩的json响应(通过http(s)触发)?

这也意味着我可以通过谷歌云平台节省大量网络费用,并为数据的移动消费者更快地加载数据。

我尝试使用Tuky,Fecha,Bid_requests,Bid_responses_won,Fill_rate,Bid_responses_won_clearing_price,Bid_responses_won_clearing_income,aaaP,17/01/2018,41325955,22453,0.05,3.97,89.17 本机模块,但没有运气......

zlib

在Postman中,响应的大小相同,内容类型已更改,但响应中没有设置if (req.get('Accept-Encoding') && req.get('Accept-Encoding').indexOf('gzip') > -1) { interpretation.gzip = true; const zlib = require('zlib'); res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); zlib.gzip(JSON.stringify(interpretation), function (error, result) { if (error) throw error; res.status(200).send(result); }) } else { interpretation.gzip = false; res.status(200).send(interpretation); } 标题...

At the top (white background) is the my request's headers. Works well, and the header is received by my application. The response headers miss my Content-Encoding.

3 个答案:

答案 0 :(得分:1)

查看App Engine FAQ,特别是“如何提供压缩内容?”这一问题的答案:

  

....为了强制提供gzip压缩内容,客户可以提供'gzip'作为 Accept-Encoding 和   用户代理请求标头。如果不存在 Accept-Encoding 标头,则不会对内容进行gzip压缩...

另外,在this group post中,有一个示例说明如何使用Accept-EncodingUser-Agent的组合来发送云功能请求:

curl -v "https://us-central1-<project>.cloudfunctions.net/test" -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" -H "Accept-Encoding: gzip"

答案 1 :(得分:0)

您可以尝试使用zlib模块来处理压缩并为响应设置适当的编码:

exports.helloWorld = function helloWorld(req, res) {
  const zlib = require('zlib');

  // Obtain JSON stream from your source...

  res.status(200);

  res.set('Content-Type', 'text/plain');
  res.set('Content-Encoding', 'gzip');

  json.pipe(zlib.createGzip()).pipe(res);
};

当然,首先要检查客户是否接受gzip。此外,使用zlib编码可能很昂贵,结果应该缓存。

答案 2 :(得分:0)

Expressjs Production best practices: performance and reliability如下所述,它可以适用于基本的Node.js。他们使用流行的compression package available on NPM

使用gzip压缩

Gzip压缩可以大大减小响应主体的大小,从而提高Web应用程序的速度。在Express应用程序中使用压缩中间件进行gzip压缩。例如:

var compression = require('compression')
var express = require('express')
var app = express()
app.use(compression())