AWS API Gateway CORS飞行前检查失败

时间:2017-05-19 10:03:06

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

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

但是,当我尝试进行CORS飞行前检查时,我发现身体{"message": "Internal server error"}出现500错误,CloudWatch记录Execution failed due to configuration error: Unable to transform request

修改

配置如下:enter image description here

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

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

3 个答案:

答案 0 :(得分:7)

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

我有一些事情:

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

由于:

  

你可以留下cors:true但是设置binary_support:false - 他们不会   好像在一起很好玩。

here有同样的问题并解决了删除二进制支持的问题)

如果不是,你可以试试这个:

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

      

    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

  • 将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网关阻止了飞行前请求。

希望对你有所帮助!

答案 1 :(得分:2)

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

如果是,请发布模板。

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

此外,请务必在使用浏览器进行测试之前重新部署最新更改。

答案 2 :(得分:1)

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

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