【问题标题】:Fail to enable CORS for API Gateway functions为 API 网关功能启用 CORS 失败
【发布时间】:2018-01-30 22:12:10
【问题描述】:

我明白了

尝试在 API Gateway 上启用 CORS 时,为什么会这样?如何解决?这些功能是使用 AWS SAM 部署的。但我注意到,如果我通过 AWS 控制台创建自己的 API,也会发生这种情况

错误看起来像:

  • 指定的模型名称无效 application/json=Empty
  • 指定的响应状态代码无效

我发现我似乎需要自己添加一个“空”响应模型?


现在,我明白了

添加 Access-Control-Allow-Origin 集成响应头映射到 POST 方法(指定的响应状态码无效)

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    首先请选择您的根资源并选择“启用 CORS”。它将为所有方法启用 CORS。理想情况下它应该工作。如果它不起作用请在响应中添加一个空的 json,正如我在随附的屏幕截图中标记的那样。我相信您没有在 OPTIONS 方法响应中添加任何默认响应标头(在 Method Response 中)。请参考截图

    【讨论】:

    • 我按照您的操作进行操作,发现虽然在开发工具中,我将 OPTIONS 视为 HTTP200,但我仍然收到“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”
    • 我认为是因为 OPTIONS 路由没有返回正确的标头?我在这个屏幕上实际指定了什么?这条路线返回的“模式”?如何指定这些标头的值?我认为这是缺少的部分
    • 好的发现在我这样做并返回集成响应之后我可以在那里设置值。现在,我需要弄清楚如何自动化这个......
    • 选项请求未返回响应标头。如何在 Allow-Origin 标头中添加诸如“*”之类的值?
    • 这修复了 4 个标头中的 3 个,但 Add Access-Control-Allow-Origin Integration Response Header Mapping to GET method 仍然失败:(
    【解决方案2】:

    从左侧菜单中创建一个新模型,您将称之为 Empty 并且它可以工作

    【讨论】:

    • 这解决了问题,是问题的正确解决方案。
    【解决方案3】:

    我在使用 API Gateway + Lambda 时遇到了 CORS 问题,上面的答案对我没有帮助,但我发现我需要在我的 API 中的响应代码中添加一些标头信息。

    我需要添加res.statusCode和两个标题。

    // GET
    // get all myModel
    app.get('/models/', (req, res) => {
      const query = 'SELECT * FROM MyTable'
      pool.query(query, (err, results, fields) => {
        //...
    
        const models = [...results]
        const response = {
          data: models,
          message: 'All models successfully retrieved.',
        }
        //****** needed to add the next 3 lines
        res.statusCode = 200;
        res.setHeader('content-type', 'application/json');
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.send(response)
      })
    })
    

    【讨论】:

    【解决方案4】:

    2020 回答:如今,在仪表板中创建 API 时,有一个名为 HTTP API 的选项。对于这种类型,我发现 CORS 配置要容易得多。如果你有这种类型的 API,你只需点击侧边栏中“开发”下的“CORS”,然后在 Access-Control-Allow-Origin 下添加“*”。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2019-03-16
      • 2021-04-08
      • 2023-03-15
      • 1970-01-01
      • 2020-01-22
      相关资源
      最近更新 更多