AWS API网关代理响应失败/已丢弃

San*_*eev 3 api proxy curl amazon-web-services aws-api-gateway

问题:

使用Postman时,AWS API网关代理不会从我的后端服务传回响应,但可以使用curl

说明:

我有一个后端服务,我想通过AWS API网关公开.在这种情况下,网关的使用纯粹是作为HTTP代理.所以,

  1. 创建了一个新的API
  2. 使用ANY将资源设置为"代理"
  3. 给我的后端服务地址
  4. 部署它(不需要Auth,但是需要API密钥)
  5. 可以成功从部署阶段URL调用我的后端服务
  6. 使用CA证书创建自定义域
  7. 在我的DNS提供程序上创建了一个别名
  8. 1小时后,域名正在运行并指向云端

问题

我打电话给自定义域名,

  1. API网关收到了它
  2. 呼叫记录在cloudwatch日志中,并且
  3. 它击中了我的后端.
  4. 后端回复了API网关.

但是,在我的邮递员身上,我看到"无法得到任何回应"

但是,如果我尝试通过curl,我会收到由我的后端发送的预期响应.所以,不清楚的部分是 -

  1. Postman调用或基于GET的普通浏览器URL栏到我的端点有什么问题?

  2. 为什么卷曲成功?

  3. 并且,对于我的API网关端点,我已将API密钥设置为必需.我创建了一个API密钥并将其分配给API.有趣的是,即使我没有传递API密钥,卷曲调用仍然是成功的.为什么API网关允许这样的呼叫?

  4. 对我来说另一个令人困惑的问题是,我必须传递自定义值Accept,并将Content-Type其用于我的API版本控制.

例如:Accept: application/json-v1失败但Accept: application/xml-v1正在发挥作用.

我认为这与价值有关,因为API Gateway并不喜欢它.

我已经仔细阅读了文档,仍然无法找到所有这些问题的任何合理解释.我错过了什么导致这些奇怪的问题?到目前为止,我的google fu还不足以解决这个问题.

请帮助或同等地指出AWS网关中的特定文档,这些文档可以帮助解决我可能在这些主题上遗漏的这个或任何讨论主题.

至少得到其中一个的答案将使我清楚我的方法.

谢谢大家!

e_l*_*iel 10

快速回答:添加标题 Accept-Encoding:identity

使用AWS api-gateway时遇到了完全相同的问题.在我的情况下,解决方案是Accept-Encoding:identity从邮递员添加标头或配置AWS API以默认将其发送到我的后端.

当我直接从邮递员调用我的后端时,我可以设置标题gzip,邮递员将正确显示响应,但是当我通过AWS执行此操作时,似乎是一个我无法解决的问题.将提到的标头设置为Identity将指示后端不修改响应(或应用标识功能).