我正在使用Zappa来部署我的应用程序,当按下API网关“OPTIONS”资源中的选项上的“测试”按钮时,cors已启用并且一切似乎都正常。
但是,当我尝试进行CORS飞行前检查时,我发现身体{"message": "Internal server error"}
出现500错误,CloudWatch记录Execution failed due to configuration error: Unable to transform request
修改:
编辑2
我尝试通过zappa_settings.json
("cors": true
)和手动点击AWS控制台中的enable cors来启用CORS
有没有人有任何指针如何进一步调试?
答案 0 :(得分:7)
有没有人有任何指针如何进一步调试?
我有一些事情:
在zappa_settings.json
,您没有binary_support: false
这个选项,对吧?
由于:
你可以留下cors:true但是设置binary_support:false - 他们不会 好像在一起很好玩。
(here有同样的问题并解决了删除二进制支持的问题)
如果不是,你可以试试这个:
对于每个响应代码,请将响应标题设置为:
X-请求-随着
接入控制允许接头
访问控制允许来源
接入控制允许的方法
转到Integration Response,选择一个已创建的响应代码,然后选择Header Mappings
插入标题的默认值 例如:
X-Requested-With:' *'
访问控制 - 允许 - 标题:'内容类型,X-Amz-Date,授权,X-Api-Key,x-requested-with'
Access-Control-Allow-Origin:' *'
访问控制 - 允许 - 方法:' POST,GET,OPTIONS'
必须对每种方法重复此操作,包括新创建的OPTIONS
(摘自here)。
我假设你已经检查了这个:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html ...
我也发现这被考虑,引自here:
还应该注意,只需在API网关上启用CORS即可 对于想要的应用程序,图层是必要的但不够 针对经过IAM身份验证的Zappa API执行CORS请求(和 可能使用其他API网关级别身份验证器进行身份验证)。 应用程序本身仍然需要以适当的方式响应 与CORS相关的标题,但它没有机会这样做,如果 API网关阻止了飞行前请求。
希望对你有所帮助!
答案 1 :(得分:2)
听起来您的OPTIONS方法正在使用映射模板。 这是故意的吗?
如果是,请发布模板。
如果没有,请尝试从API网关控制台重新运行CORS向导以重置CORS配置。
此外,请务必在使用浏览器进行测试之前重新部署最新更改。
答案 2 :(得分:1)
我不太了解zappa(我们目前使用serverless来管理lambdas和API网关),但我注意到你的OPTIONS
方法响应绑定到模型为Content-Type application/json
。
我们的配置似乎工作正常,根本没有相关的模型 - IIRC OPTIONS不应该在响应中有一个正文。我想知道定义模型是否正在添加一个正文 - 即使你已经配置了一个 Empty 正文。