虽然已经通过API网关设置了CORS并且设置了Access-Control-Allow-Origin标头,但在尝试从Chrome中的AJAX调用API时仍然会收到以下错误:
XMLHttpRequest无法加载http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY . 请求的资源上不存在“Access-Control-Allow-Origin”标头 . 因此不允许原点'null'访问 . 响应具有HTTP状态代码403 .
我试图通过Postman获取URL,它显示上面的 Headers 已成功通过:
并从OPTIONS响应:
如何在不恢复JSON-P的情况下从浏览器调用我的API?
7 回答
我遇到了同样的问题 . 我用了10个小时才发现 .
https://serverless.com/framework/docs/providers/aws/events/apigateway/
如果还有其他人遇到这种情况 - 我能够在应用程序中找到根本原因 .
如果您使用自定义授权程序运行API-Gateway,API-Gateway将在实际命中服务器之前发送401或403 . 默认情况下 - 从自定义授权程序返回4xx时,未为CORS配置API网关 .
此外 - 如果您碰巧从通过API网关的请求获取
0
或1
的状态代码,这可能是您的问题 .要修复 - 在API网关配置中 - 转到“网关响应”,展开“默认4XX”并在其中添加CORS配置标头 . 即
确保重新部署您的网关 - 瞧!
让我的示例工作:我在生成的nodejs Lambda函数中_10242413_ headers:{} 内插入了 'Access-Control-Allow-Origin': '*', . 我对Lambda生成的API层进行了 no 更改 .
这是我的NodeJS:
这是我的AJAX电话
1) 我需要和@riseres一样做以及其他一些更改 . 这是我的回复 Headers :
2) And
根据这个文件:
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
在API网关配置上使用代理进行lambda函数时,post或get方法没有添加 Headers ,只有选项可以 . 您必须在响应(服务器或lambda响应)中手动执行此操作 .
3) And
除此之外,我需要在API网关post方法中禁用“API Key Required”选项 .
在我意识到lambda授权人失败并因某些未知原因被转换为CORS错误后,我得到了我的工作 . 对我的授权人(以及我应该首先添加的一些授权人测试)的简单修复,并且它有效 . 对我来说,需要API网关操作“启用CORS” . 这添加了我在API中所需的所有 Headers 和其他设置 .
如果您已经尝试了有关此问题的所有内容无济于事,那么您现在的CORS设置说明工作正常......请确保您 remember to redeploy ! CORS编辑向导,即使有所有漂亮的小绿色复选标记,也不会对您的API进行实时更新 . 也许显而易见,但它让我困扰了半天 .
我正在运行
aws-serverless-express
,在我的情况下需要编辑simple-proxy-api.yaml
.在将CORS配置为
https://example.com
之前,我只是交换了我的站点名称并通过npm run setup
重新部署,并更新了我现有的lambda / stack .