8

通过 Amplify CLI 添加了一个 API,该 API 调用读取发电机表的 lambda。

它在 AWS 中部署后的第二天运行良好。今天早上它抛出 403 错误,没有进行任何更改:

获取 https://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items 403

从源“ http://myproject-20181130113531--hostingbucket.s3-website-eu- ”访问https://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items ”上的 XMLHttpRequest west-1.amazonaws.com '' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

观察/行动

  • 确保在 API Gateway 上启用了 CORS,重新部署 API。

  • 从 API Gateway 测试 API 成功,它正确调用了 Lambda 函数

  • Amplify 服务确实创建了用户对象并保存在本地存储中
  • 在开发人员工具下调用 OPTIONS 看起来也不错:

    通用设置:

  • 请求网址:https ://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items

  • 请求方法:选项
  • 状态码:200

    响应标头:

  • 访问控制允许标头:内容类型、X-Amz-Date、授权、X-Api-Key、X-Amz-Security-Token
  • 访问控制允许方法:DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT
  • 访问控制允许来源:*`

想知道为什么 403 会出现 CORS 错误。有什么想法吗?让我感到困惑和害怕的是,在我醒来后几个小时没有任何变化,一切都失败了:-(

4

2 回答 2

1

我有同样的错误(并遵循相同的操作)。就我而言,我没有通过跳过 init 参数在Amplify 后调用中传递正确的参数。我通过传递带有空主体的 myInit 参数来解决此问题:

let myInit = {
    body: {}
}

API.post(apiName, path, myInit)
于 2019-04-15T10:18:48.917 回答
0

这是您的解决方案: https ://serverless-stack.com/chapters/handle-api-gateway-cors-errors.html

答案是您的响应需要在标题中使用Access-Control-Allow-Originand 。Access-Control-Allow-Headers

不幸的是,当您的 API 返回错误时,它不会在标头中包含这些值。您需要创建网关响应以在错误响应中启用这些标头。

希望这可以帮助 : )

于 2021-02-06T04:58:07.110 回答