【问题标题】:AWS API Gateway CORS pre-flight check failsAWS API Gateway CORS 飞行前检查失败
【发布时间】:2017-10-19 09:50:28
【问题描述】:

我正在使用 Zappa 部署我的应用程序,cors 已启用,当按下 API Gateway“OPTIONS”资源中选项上的“测试”按钮时,一切似乎都正常。

但是,当我尝试执行 CORS 飞行前检查时,我收到一个 500 错误,正文 {"message": "Internal server error"} 和 CloudWatch 日志 Execution failed due to configuration error: Unable to transform request

编辑

这是配置的样子:

编辑 2 我尝试通过zappa_settings.json ("cors": true) 和在 AWS 控制台中手动单击启用 cors 来启用 CORS

有没有人指点如何进一步调试?

【问题讨论】:

  • 您是否不小心将任何配置添加到 OPTIONS 的 Method Request 或 Integration Request 中?
  • 您的映射模板可能存在问题。你试过在本地调试吗?
  • 你尝试了更多吗?问题解决了吗?

标签: amazon-web-services cors aws-api-gateway


【解决方案1】:

有没有人指点如何进一步调试?

我有一些事情:

在你的zappa_settings.json,你没有binary_support: false这个选项,对吧?

因为:

你可以离开 cors: true 但设置 binary_support: false - 他们没有 看起来很配合。

here 也有同样的问题,解决了移除二进制支持)

如果没有,你可以试试这个:

  • 在 OPTIONS 方法中,选择集成类型“mock”
  • 对于资源的每个方法
  • 转到响应方法
  • 添加所有应支持的响应方式(即200、500等)
  • 对于每个响应代码,将响应标头设置为:

    X-Requested-With

    访问控制允许标头

    访问控制允许来源

    访问控制允许方法

  • 转到集成响应,选择一个已创建的响应代码,然后选择标题映射

  • 为标题插入默认值 示例:

    X-Requested-With: '*'

    Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with'

    访问控制允许来源:'*'

    访问控制允许方法:'POST、GET、OPTIONS'

  • 必须为每个方法重复此操作,包括新创建的 OPTIONS

  • 将 API 部署到阶段
  • 使用 http://client.cors-api.appspot.com/client 检查 CORS 请求是否已成功启用

(摘自here)。

我假设您已经检查过这个:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html ...

我也发现这个值得考虑,引用自here

还应注意,只需在 API 网关启用 CORS 层是必要的,但对于想要的应用程序来说还不够 针对经过 IAM 身份验证的 Zappa API 执行 CORS 请求(以及 可能使用其他 API 网关级别的身份验证器进行了身份验证)。 应用程序本身仍需要使用适当的响应 CORS 相关标头,但如果 API 网关阻止飞行前请求。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    听起来您的 OPTIONS 方法正在使用映射模板。 这是故意的吗?

    如果是,请发布模板。

    如果没有,请尝试从 API Gateway 控制台重新运行 CORS 向导以重置您的 CORS 配置。

    另外,请记住在使用浏览器进行测试之前重新部署您的最新更改。

    【讨论】:

    • 不,没有映射模板。还尝试并重试了数十次运行 CORS 向导...
    【解决方案3】:

    我不太了解 zappa(我们目前使用 serverless 来管理 lambda 和 API 网关),但我注意到您的 OPTIONS 方法响应绑定到 Content-Type application/json 的模型。

    我们的配置似乎工作正常,根本没有关联的模型 - IIRC OPTIONS 不应该在响应中有正文。我想知道定义模型是否会添加一个主体 - 即使您已经配置了一个 Empty 主体。

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 2016-07-08
      • 2022-08-16
      • 2020-11-18
      • 1970-01-01
      • 2018-01-13
      • 2017-09-19
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多