http - 使用 CORS 从远程 Web 客户端调用 AWS API Gateway

标签 http amazon-web-services aws-api-gateway

在 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/

相关文章:

java - 如何使用OSGI远程查看html文件

python boto 显示每个实例的最新快照的问题

java - 未在 linux/EC2 实例中创建日志文件

cors - 使用 AWS API Gateway 请求验证器时启用 CORS

amazon-s3 - 如何使用 AWS CDK(首选 typescript)向 API 网关的现有 AWS cloudfront 发行版添加行为?

java - java spring 不会忽略 DELETE 之前发出的 OPTIONS 请求,这与 POST、GET 不同

ruby - 在 ruby​​ 中发送具有特定 http 版本协议(protocol)的 http 请求

amazon-web-services - 多 VPC Envi 中的 CIDR 重叠

aws-api-gateway - 使用无服务器将 lambda 函数部署到 LocalStack 时无法使用 httpApi

java - 在 servlet 中删除 cookie 时出现问题