通过Amplify CLI添加了一个API,该API调用读取发电机表的lambda。
在AWS部署后的第二天,它运行良好。今天早上抛出403错误,没有进行任何更改:
获取https://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items403
访问XMLHttpRequest'https://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items'来源''http://myproject-20181130113531--hostingbucket.s3-website-eu-west-1.amazonaws.com''已被CORS策略阻止:无"访问控制允许来源"标头存在于请求的资源上
观察/行动
-
确保在API网关上启用CORS,重新部署API。
-
从API网关测试API成功,它正确调用Lambda函数
- Amplify服务确实创建了用户对象,并且一直保存在本地存储中
-
OPTIONS的调用在开发人员工具下看起来也不错:
常规设置:
-
请求URL:https://xxnxxtfxx.execute-api.eu-west-1.amazonaws.com/Prod/items
- 请求方法:OPTIONS
-
状态代码:200
响应标头:
- 访问控制允许标头:内容类型、X-Amz-Date、Authorization、X-Api-Key、X-Amz-Security-Token
- 访问控制允许方法:DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT
- 访问控制允许原点:*`
想知道403为什么会出现CORS错误有什么想法吗?让我困惑和害怕的是在我醒来几个小时后,一切都没有改变:-(
我遇到了同样的错误(并执行了同样的操作(。在我的例子中,我在Amplify post调用中跳过init参数,没有传递正确的参数。我通过传递一个带有空正文的myInit参数来解决这个问题:
let myInit = {
body: {}
}
API.post(apiName, path, myInit)
以下是您的解决方案:https://serverless-stack.com/chapters/handle-api-gateway-cors-errors.html
答案是您的响应需要标头中的Access-Control-Allow-Origin
和Access-Control-Allow-Headers
。
遗憾的是,当API返回错误时,它不会在头中包含这些值。您需要创建一个网关响应,以便在错误响应中启用这些标头。
希望这有帮助:(