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

Laz*_*har 5 json node.js google-cloud-platform google-cloud-functions serverless

如果我使用gzip压缩进行响应,则我的Google Cloud Functions中的JSON响应的大小最多可减少70-80%。

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

这也意味着我可以通过Google Cloud Platform节省大量网络费用,并为数据的移动用户更快地加载数据。

我尝试使用本zlib机模块,但没有运气...

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);
}
Run Code Online (Sandbox Code Playgroud)

在Postman中,响应的大小相同,内容类型已更改,但是Content-Encoding响应中没有设置标题...

顶部(白色背景)是我的请求的标头。 效果很好,并且标头已由我的应用程序接收。 响应标头缺少我的内容编码。

Vic*_*rez 5

查看App Engine 常见问题解答,特别是“我如何提供压缩内容? ”这个问题的答案:

....要强制提供 gzip 压缩的内容,客户端可以提供“gzip”作为Accept-EncodingUser-Agent请求标头的值。如果不存在Accept-Encoding标头,则永远不会压缩内容...

此外,在这组帖子有如何发送使用的组合云功能的请求的例子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"
Run Code Online (Sandbox Code Playgroud)