繁体   English   中英

XMLHttpRequest-AWS API Gateway请求的资源上不存在“ Access-Control-Allow-Origin”标头

[英]XMLHttpRequest - AWS API Gateway No 'Access-Control-Allow-Origin' header is present on the requested resource

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

XMLHttpRequest无法加载https://............us-east-1.amazonaws.com/v1/...../select 所请求的资源上没有“ Access-Control-Allow-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?

非常感谢所有帮助

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

我们希望尽快解决此问题,但是很遗憾,我无法提供ETA。

这是因为您可能会得到缓存的结果。

API网关> API>授权者中,尝试将自定义授权者的结果TTL(以秒为单位)更改为0 ,默认情况下为300秒。

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

缓存是使用令牌,授权者,环境,您的API和部署创建的

如果将TTL设置为0,则它将不会进行缓存,并且可以测试API

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM