18

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

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

我们想通过使用 api gateway 来公开这个 api,但它只是用于不压缩请求。当我们发送请求压缩内容的请求时,Content-Encoding标头设置正确,但响应内容已损坏。

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

问候。

4

6 回答 6

14

自 2017 年 12 月 19 日起。AWS API Gateway 支持编码。

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

查看示例

这里还有AWS 官方发布帖子。

于 2018-02-13T03:08:34.963 回答
9

不幸的是,API Gateway 目前不支持 HTTP 压缩。但是,它是为未来的发展考虑的。

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

如果它适用于您的用例,您也可以对压缩内容进行 base64 编码,通过 API 网关对其进行代理,然后在客户端对其进行解码。

谢谢,瑞安

于 2016-09-12T21:00:14.280 回答
6

只是一种解决方法,但如果您设置Accept-Encoding: identity,您应该正确接收结果(与链接的讨论相反,我发现它适用于 POSTGET)。

于 2017-06-09T14:30:49.623 回答
3

虽然这个问题有点老了,但我想添加一个答案,因为这个问题是最受欢迎的问题。实际上,有两种情况与返回压缩内容有关。

第一种情况是您希望 API Gateway 压缩内容。正如公认的答案所暗示的,您可以在 API 上启用内容编码,然后部署它。

第二种情况是您的集成端点已经压缩了结果,您只想通过 API Gateway 绕过它。传统的解决方法是将其配置为二进制媒体类型。但是,这可能会出现问题,因为它将开始将所有具有媒体类型的响应视为二进制文件。此外,如果您需要处理多种媒体类型,您唯一的选择是将其设置为“*”。如果您使用的是非代理集成,您将失去转换结果的机会。

为了解决第二个问题,现在 API Gateway 在使用代理集成并且对内容进行编码时隐含地将响应结果假定为二进制(响应的 Content-Encoding 的值不是“identity”)。满足这些条件时,您无需再配置二进制媒体类型。但是,如果您要返回实际的二进制媒体(例如图像、视频),您仍然需要将它们配置为二进制媒体类型。

你可能想知道当你有这两种情况时会发生什么。简短的回答是,当响应已经有 Content-Encoding 标头时,API Gateway 不会再次压缩。

希望这会有所帮助。

于 2018-09-24T23:00:45.273 回答
2

我通过添加Accept-Encoding到 AWS API Gateway使其工作Integration Request

第 1 步: 转到 AWS API Gateway 控制台,单击Integration Request 在此处输入图像描述

第 2 步: 添加Accept-EncodingHTTP Headers部分、值'identity'(需要单引号) 在此处输入图像描述

第三步: 点击Actions->Deploy API

如果你正在使用AWS CloudFormation,你可以添加 yaml Integration: RequestParameters: integration.request.header.Accept-Encoding: "'identity'

于 2017-11-27T09:30:29.213 回答
0

要允许来自 HTTP 代理端点的 GZipped 内容,您可以在 API 的“二进制支持”部分的“二进制媒体类型”中添加 */*。

于 2017-06-22T05:48:50.203 回答