【问题标题】:XMLHttpRequest - AWS API Gateway No 'Access-Control-Allow-Origin' header is present on the requested resourceXMLHttpRequest - AWS API Gateway 请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】:2017-04-28 21:30:51
【问题描述】:

当我尝试通过浏览器打开请求时,出现以下错误:

XMLHttpRequest 无法加载 https://............us-east-1.amazonaws.com/v1/...../select。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此,Origin 'http://localhost' 不允许访问。 响应的 HTTP 状态代码为 401。

我知道这可能是 CORS 错误,但我无法解决问题。

我正在使用 AWS API Gateway,并且我已经在 API 上启用了 CORS,在 S3 上启用了 CORS,并且所有权限都正常。

xmlHttp.open( "GET", "https://.......execute-api.us-east-1.amazonaws.com/v1/....../select", true);
xmlHttp.send();

我检查了 API GET 方法和 OPTIONS 方法,一切正常。

其他信息:

当我在方法请求上使用未定义“授权”的 API 时,一切正常,但是当我输入授权方时,出现上述错误。

另一个问题:

我还需要在 Lambda 函数上允许 CORS 吗?

非常感谢大家的帮助

【问题讨论】:

    标签: javascript api amazon-web-services amazon-s3 aws-api-gateway


    【解决方案1】:

    该问题是 API Gateway 的一个已知错误。当您对 API 进行授权时,如果身份验证失败(例如访问被拒绝),则 CORS 标头不会应用于响应。如果授权成功,则标头将应用于响应。

    我们希望尽快解决此问题,但很遗憾我无法提供预计到达时间。

    【讨论】:

      【解决方案2】:

      这是因为你可能会得到一个缓存的结果。

      API gateway > API > Authorizers 尝试将 Result TTL in seconds to 0 从您的自定义授权器更改为默认 300 秒。

      在自动生成的策略中,策略被缓存,所以当第二个请求到达时,它与缓存的策略不匹配并返回错误。

      使用令牌、授权方、环境、您的 API 和部署创建缓存

      如果你将 TTL 设置为 0 那么它就不会被缓存,你可以测试你的 API

      您需要重新部署 API 以反映此更改

      这是我尝试过的一种解决方案,另一种解决方案是更改自定义生成的策略并在资源方面更加具体。您可以将每个特定 API 作为资源数组提供。

      【讨论】:

        猜你喜欢
        • 2021-06-29
        • 2014-09-22
        • 2020-10-23
        • 2015-04-04
        • 2017-08-20
        • 1970-01-01
        • 2019-06-10
        • 2022-06-15
        • 2017-04-11
        相关资源
        最近更新 更多