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
使用 BOTO3 为 AWS Api Gateway 自动化 CORS