【发布时间】:2016-05-13 10:49:04
【问题描述】:
虽然已经通过 API Gateway 设置了 CORS 并且设置了 Access-Control-Allow-Origin 标头,但在 Chrome 中尝试从 AJAX 调用 API 时仍然收到以下错误:
XMLHttpRequest 无法加载 http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 403。
我尝试通过Postman 获取网址,显示上述标头已成功传递:
并且来自 OPTIONS 响应:
如何在不恢复为 JSON-P 的情况下从浏览器调用我的 API?
【问题讨论】:
-
你在 S3 上设置了吗?如果是这样,您可以提出
Bucket Policy吗?确保您的策略中有该方法 -
API Gateway 团队在这里... 如果您在控制台中使用“启用 CORS”功能,则配置应该是正确的。我最好的猜测是您没有在浏览器正在执行的 JavaScript 中调用 API 中的正确资源路径。如果您尝试对不存在的方法/资源/阶段进行 API 调用,您将收到没有任何 CORS 标头的通用 403。如果您调用正确的资源,我看不到浏览器如何错过 Access-Control-Allow-Origin 标头,因为 Postman 中的 OPTIONS 调用清楚地包含所有正确的 CORS 标头。
-
@RyanG-AWS 客户端没有对请求进行签名,因为 API 是由它使用用户特定令牌调用的资源进行身份验证的,因此凭证不是一个因素。我可以通过直接在浏览器中访问 URL 来调用 API,并得到相应的响应。
-
@makinbacon:你找到解决方案了吗?我在这里遇到了同样的问题。
-
我的方法和阶段是由 Lambda 自动生成的。事后我启用了 CORS。与 OP 相同的错误。我吹走了自动生成的东西,创建了一个新的 API 和方法,部署到一个新的阶段,它工作得很好。
标签: ajax amazon-web-services cors aws-api-gateway