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

标签 api amazon-web-services curl proxy aws-api-gateway

问题 :

使用 Postman 时,AWS API Gateway 代理不会从我的后端服务传回响应,但适用于 curl

描述 :

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

  • 创建了一个新的 API
  • 使用任何
  • 将资源设置为“代理”
  • 给我的后端服务地址
  • 部署它(不需要身份验证,但需要 API key )
  • 可以从部署阶段 url 成功调用我的后端服务
  • 使用 CA 证书创建自定义域
  • 在我的 DNS 提供商
  • 上创建了一个别名
  • 1 小时后域启动并指向云端

  • 问题

    我调用自定义域,
  • API 网关收到了
  • 调用记录在cloudwatch日志中,
  • 它正在击中我的后端。
  • 后端回复 API 网关。

  • 但是,在我的 postman 身上,我看到“无法得到任何回应”

    但是,如果我通过 curl 尝试此操作,则会收到后端发送的预期响应。所以,不清楚的部分是——
  • Postman 调用或基于 GET 到我的端点的普通浏览器 URL 栏有什么问题?
  • 为什么 curl 成功了?
  • 并且,对于我的 API 网关端点,我已将 API key 设置为必需的。我创建了一个 API key 并将其分配给 API。有趣的是,即使我没有传递 API key ,curl 调用仍然成功。为什么 API Gateway 可以允许这样的调用?
  • 另一个令我困惑的问题是,我必须在 Accept 和用于 API 版本控制的 Content-Type 中传递自定义值。

  • 例如:Accept: application/json-v1 失败但 Accept: application/xml-v1 正在工作。

    我认为这与值(value)有关,因为 API Gateway 不喜欢它。

    我已经彻底阅读了文档,但仍然找不到对所有这些问题的任何合理解释。我错过了什么导致这些奇怪的问题?到目前为止,我的 google fu 也不足以解决这个问题。

    请帮助或同样指出 AWS 网关中可以帮助解决此问题的特定文档或我可能在这些主题上遗漏的任何讨论主题。

    至少得到其中一个的答案会让我清楚我的方法。

    谢谢人们!

    最佳答案

    快速回答:添加标题 Accept-Encoding:identity
    我在使用 AWS api-gateway 时遇到了完全相同的问题。在我的情况下,解决方案是添加来自 postman 的 header Accept-Encoding:identity 或配置 AWS API 默认将其发送到我的后端。

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

    关于api - AWS API 网关代理响应失败/丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358192/

    相关文章:

    将 ssl 放在域上后,Wordpress 管理员停止工作

    perl - 使用 curl 发布 Gzip 压缩数据

    java - 从网站提取数据的方法?

    php - Braintree PHP SDK cURL 异常

    amazon-ec2 - 如何将文件和文件夹上传到 AWS EC2 实例?

    php - 应用程序在同一服务器上使用服务的最佳协议(protocol)?

    Ruby 发布请求 : PDF File

    javascript - 在 Javascript 中使用 Google Calendar API 插入方法创建新日历返回错误 400 "Missing title"

    amazon-web-services - Elastic Beanstalk 上的 ElasticSearch

    .net - .net core 3.1 web api 中的多个 get 方法