在 AWS 上,我构建了一个 Lambda 函数,它使用 API 网关公开在网络上。
对 API 的访问由 Amazon Cognito 保护。
我的问题是我无法从托管在 test.mydomain.com 的客户端向此 API 发送请求,即使我在 Cognito 上成功验证后也是如此(因此在请求中发送了所需的 token ) header )。
我在网络客户端上使用的代码将请求发送到 API 网关端点:
function ajaxPost(url, data, callback) {
var req = new XMLHttpRequest();
req.open("POST", url);
req.addEventListener("load", function () {
if (req.status >= 200 && req.status < 400) {
callback(req.responseText);
} else {
console.error(req.status + " " + req.statusText + " " + url);
}
});
req.addEventListener("error", function () {
console.error("URL " + url + " unreachable.");
});
req.setRequestHeader("Content-Type", "application/json");
req.setRequestHeader("Authorization", data.get("id-token"));
data = JSON.stringify(data);
req.send(data);
}
我通过 AWS 控制台在 API 方法上启用了 CORS,也在我的浏览器上进行了测试,因此应该允许跨域请求。
编辑
在 API 网关 CORS 配置中添加 Access-Control-Expose-Headers 后, 我从 Chrome 控制台收到的错误消息是:“XMLHttpRequest 无法加载 https://XXXX.execute-api.us-east-1.amazonaws.com/prod/RessourceName。预检响应具有无效的 HTTP 状态代码 401”,我可以看到 “x-amzn-errortype: UnauthorizedException" 在 OPTIONS 响应 header 中。
现在已经过去几天了,在查看了每个 API 网关教程和配置之后,我仍然被困住了...任何帮助将不胜感激,非常感谢!
最佳答案
解决了!
显然,AWS 中会存在一个错误,即在部署 API 之后启用/编辑 CORS 将不会执行任何操作。
请在此处查看 SO 回复:https://stackoverflow.com/a/40733680/7717871
我尝试从 AWS 控制台创建一个新的 API,在流程的最开始启用 CORS,然后部署新创建的 API:它成功了。
关于http - 使用 CORS 从远程 Web 客户端调用 AWS API Gateway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896274/