Problem:
使用 Postman 时,AWS API Gateway 代理不会传回我的后端服务的响应,但适用于curl
描述:
我有一个想要通过 AWS API 网关公开的后端服务。在这种情况下,网关的使用纯粹是作为 HTTP 代理。所以,
- 创建了一个新的 API
- 使用 ANY 将资源设置为“代理”
- 给了我的后端服务地址
- 已部署(无需身份验证,但需要 API 密钥)
- 可以从部署阶段 url 成功调用我的后端服务
- 使用 CA 证书创建自定义域
- 在我的 DNS 提供商上创建了别名
- 1 小时后,域启动并指向云端
Issue
我调用了自定义域,
- API网关收到
- 呼叫记录在 cloudwatch 日志中,并且
- 它正在攻击我的后端。
- 后端回复API网关。
但是,在我的邮递员身上,我看到“无法得到任何回应”
但是,如果我尝试通过curl
,我收到了后端发送的预期响应。所以,不清楚的部分是 -
Postman 调用或基于普通浏览器 URL 栏的 GET 到我的端点有什么问题?
为什么curl能成功?
并且,对于我的 API 网关端点,我已将 API 密钥设置为强制。我已经创建了一个 API 密钥并将其分配给 API。有趣的是,即使我不传递 API 密钥,curl 调用仍然成功。为什么API网关可以允许这样的调用?
对我来说另一个令人困惑的问题是,我必须在Accept
, and Content-Type
我用于 API 版本控制。
Ex: Accept: application/json-v1
失败了但是Accept: application/xml-v1
工作中。
我认为这与价值有关,因为 API Gateway 不喜欢它。
我已经彻底阅读了文档,但仍然找不到所有这些问题的合理解释。我错过了什么导致了这些奇怪的问题?到目前为止,我的谷歌也不足以解决这个问题。
请帮助或同样向我指出 AWS gateway 中的特定文档,这些文档可以帮助解决此问题或我可能错过的有关这些主题的任何讨论线程。
至少得到其中一个的答案将使我对我的方法有一个清晰的认识。
谢谢人们!
快速回答:添加标题Accept-Encoding:identity
我在使用 AWS api-gateway 时遇到了完全相同的问题。就我而言,解决方案是添加标题Accept-Encoding:identity
从邮递员或配置 AWS API 以默认将其发送到我的后端。
当我直接从邮递员调用后端时,我可以将标题设置为gzip
邮递员将正确显示响应,但是当我通过 AWS 执行此操作时,这似乎是一个我无法解决的问题。将提到的标头设置为Identity
将指示后端不要修改响应(或应用身份函数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)