当我尝试通过浏览器打开请求时,出现以下错误:
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工作正常,但是当我把授权人我得到上面的错误。
另一个问题:
我是否需要在Lambda函数上允许CORS?
非常感谢所有帮助
答案 0 :(得分:2)
该问题是API Gateway的一个已知错误。当您对API进行授权时,如果auth失败(例如拒绝访问),则CORS头不会应用于响应。如果授权成功,则标头将应用于响应。
我们希望尽快解决这个问题,但不幸的是我无法提供ETA。
答案 1 :(得分:2)
这是因为您可能会获得缓存结果。
在 API网关> API>授权人尝试将自定义授权程序中的结果TTL(以秒为单位)更改为0 ,默认情况下为300秒。
在自动生成的策略中,策略被缓存,因此当第二个请求到达时,它与缓存的策略不匹配并返回错误。
使用令牌,授权程序,环境,API和部署
创建缓存如果您将 TTL设置为0 ,那么它将不会缓存,您可以测试API
您需要重新部署API以反映此更改
这是我尝试过的一个解决方案,另一个是更改自定义生成的策略,并且在资源方面更具体。您可以将每个特定API提供为一组资源。