AWS API Gateway CORS 飞行前检查失败

Posted

技术标签:

【中文标题】AWS API Gateway CORS 飞行前检查失败【英文标题】:AWS API Gateway CORS pre-flight check fails 【发布时间】: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 中? 您的映射模板可能存在问题。你试过在本地调试吗? 你尝试了更多吗?问题解决了吗? 【参考方案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 主体。

【讨论】:

以上是关于AWS API Gateway CORS 飞行前检查失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway + AWS Lambda 中的 CORS

AWS CDK API Gateway 启用 Cors

AWS API Gateway CORS 问题

使用 BOTO3 为 AWS Api Gateway 自动化 CORS

AWS API Gateway 429 响应 - 没有 CORS 标头

AWS API Gateway 中的 CORS 配置