如何使用AWS API Gateway返回gzip压缩内容

alt*_*hor 16 http-accept-encoding aws-api-gateway

我们开发了一个应用程序,它提供了多个休息服务,并支持Accept-Encoding通过Content-Encoding:gzip标头值返回压缩内容的标头.

此应用程序部署在aws上的ec2实例上,当我们发送带有Accept-Encoding值设置的请求时,响应被正确构建.

我们希望通过使用api网关公开这个api,但它只是为了不压缩请求而工作.当我们发送请求gzip压缩内容的请求时,Content-Encoding标头设置正确但响应内容已损坏.

我们是否必须在集成响应或方法响应步骤中设置一些特殊参数或配置?

问候.

小智 10

自2017年12月19日起.AWS API Gateway具有编码支持.

创建API后,只需转到"设置"并选择"内容编码启用".

见例子

另外这里是AWS正式发布后.

  • 如果您在应用中管理CORS标头,请不要忘记在您的飞行前响应中允许任何必要的响应标头.我错过了`Content-Encoding`,尽管启用了这个API选项,但API Gateway并未压缩我的响应.在我对CORS OPTION飞行前的响应中,标题`Access-Control-Allow-Headers:Content-Type,Content-Encoding`似乎修复了它. (6认同)
  • 此外,我认为在启用此设置后,我必须将 API 部署到舞台上。尽管我的 API 中没有其他任何变化,并且设置似乎设置在“api”级别而不是“个人阶段”级别,但在我重新部署 API 之前,我没有看到生产阶段的压缩到那个阶段。 (2认同)

Rya*_*anG 9

遗憾的是,API Gateway目前不支持HTTP压缩.但是,它考虑到未来的发展.

目前,您需要从端点返回未压缩的内容(即省略Accept-Encoding标头),以便通过API网关进行代理.

如果它适用于您的用例,您可以选择base64编码压缩内容,通过API网关代理它,并在客户端上解码它.

谢谢,瑞恩


Dan*_*ell 5

只有一种解决方法,但是如果你设置了Accept-Encoding: identity你应该正确地收到结果(与我发现它适用于POST GET 的链接讨论相反).

  • 把头发拉了几个小时后,我可以确认这个不起眼的信息.随着GZipping的这个问题以及让CORS工作的问题,它已成为一个噩梦.我相信有数千人没有我的毅力,只是放弃了.让你的行动亚马逊. (2认同)