XMLHttpRequest - AWS API Gateway No' Access-Control-Allow-Origin'标头出现在请求的资源上

时间:2016-12-13 17:54:49

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

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

  

XMLHttpRequest无法加载   https://............us-east-1.amazonaws.com/v1/...../select。   No' 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​​时没有定义"授权"在方法请求上,everthing工作正常,但是当我把授权人我得到上面的错误。

enter image description here

enter image description here

另一个问题:

我是否需要在Lambda函数上允许CORS?

非常感谢所有帮助

2 个答案:

答案 0 :(得分:2)

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

我们希望尽快解决这个问题,但不幸的是我无法提供ETA。

答案 1 :(得分:2)

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

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

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

使用令牌,授权程序,环境,API和部署

创建缓存

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

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

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