【问题标题】:AWS API Gateway Compressed ResponseAWS API Gateway 压缩响应
【发布时间】:2017-01-11 02:15:34
【问题描述】:

我了解,截至 2016 年 11 月,API Gateway 现在支持二进制媒体类型。是否可以从 lambda 代理返回压缩的 HTTP?

我有一个 express js 应用程序需要返回压缩输出(来自数据库查询),否则响应正文超出 lambda 响应正文限制。

谢谢!

【问题讨论】:

  • 很遗憾,API Gateway 目前不支持 HTTP 压缩。但是,它是为未来的发展考虑的。并且不支持将二进制输出从 Lambda 传递到 API Gateway。

标签: aws-api-gateway


【解决方案1】:

您可以将压缩后的数据以 base64 编码的字符串从 Lambda 返回到 API Gateway。

然后您可以使用二进制媒体类型功能将 base64 编码的字符串转换回二进制数据,然后再返回给客户端。

如果您想强制 API Gateway 返回二进制数据而不是遵守接受标头,您可以通过 CLI 将集成响应中的 contentHandling 属性设置为 CONVENT_TO_BINARY

aws apigateway update-integration-response \
    --rest-api-id <api-id> \
    --resource-id <resource-id> \
    --http-method GET \
    --status-code 200 \
    --patch-operations '[{"op" : "replace", "path" : "/contentHandling", "value" : "CONVERT_TO_BINARY"}]'

See example of binary support with Lambda.

【讨论】:

  • 谢谢。因此,如果我有一个我 gzip 的 json 字符串(内容类型:application/json,内容编码:gzip),并将其作为 base64 编码字符串发送,API Gateway 是否能够将其转换回二进制文件并将其传递给我的客户?
  • API Gateway 不会解压缩您的数据并将其传递给您的客户端。您的客户需要知道如何处理 gzip 数据。
  • 谢谢!我不得不破解一种在客户端上解码/解压缩的方法,但这有效。
  • @galacticpresident 你能介绍一下你是如何做到这一点的吗?如果您可以在此处发布无服务器响应对象,那就太好了
  • @CharithW 我使用了 pako - 这是客户端上的代码行: var decodedData = JSON.parse(pako.inflate(atob(data), { to: 'string'}));对于大型结果集,性能并不理想。我真的需要想出一个流结果解决方案。
猜你喜欢
  • 2021-05-24
  • 2018-06-09
  • 2016-04-16
  • 2019-10-25
  • 1970-01-01
  • 2017-08-08
  • 2018-08-12
  • 2018-04-19
  • 2015-10-21
相关资源
最近更新 更多