该请求已重定向到' https://..com/site/login?',对于需要预检的跨源请求,该请求不被允许

时间:2015-01-20 02:12:59

标签: angularjs google-chrome http cors

在发布这个问题之前,我已经完成了大部分的堆栈溢出问题,但我没有得到答案

我正在尝试访问将执行Oauth身份验证的客户端api,因此当我调用api时,它应该抛出一个类似于fb auth的身份验证的弹出窗口,但我最终在我的chrome控制台中出现错误,如下所示

  

XMLHttpRequest无法加载https://api.springrole.com/authorize
  范围= XXXX&安培; REDIRECT_URI = http://localhost:8080/CheckRest/springrole.html&response_type=XXXX&client_id=XXXXXXXX。   该请求被重定向到   'https://springrole.com/site/login?api_login=1&scope=XXXX&state=&error=invalid_request',   这对于需要预检的跨源请求是不允许的。

为了安全起见,我刚刚用XXX掩盖了一些值。我的需求如下所示

 $http({
        method : 'GET',

        url : url,
        headers : {
            'Content-Type' : 'application/json',
                "Access-Control-Allow-Origin": "https://api.springrole.com",
                "Access-Control-Allow-Methods":"GET",
                    "Access-Control-Allow-Credentials": true
        }
    }).success(function(data, status, headers, config) {
        $scope.details.response = JSON.stringify(data);

        console.log("success" + data)
    })

如果我删除请求中的标题,我会收到以下显示的错误

  

请求时没有'Access-Control-Allow-Origin'标头   资源。因此不允许来源“http://localhost:8080”   访问。

任何建议或工作都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

是的,你出于安全原因遇到了Same Origin Policy。简而言之,它基本上是你要求/打开来自不同来源的东西,这不是很安全。如果需要,可以通过添加参数--disable-web-security暂时在Chrome中将其停用。

所以从终端你可以运行

open -a Google\ Chrome --args --disable-web-security

我经常这样做,所以我最后只添加了.bash_profile的别名,因此我可以轻松访问

# Run Insecure Chrome
alias insecure-chrome='open -a Google\ Chrome --args --disable-web-security'

然后在终端我可以拨打insecure-chrome,Chrome就会弹出。如果您在顶部看到安全警告,您就会知道它有效。警告看起来像这样

enter image description here

当然强制性警告在执行此操作时要小心。我不会在这种模式下上网,但在本地工作你应该没问题。

对于Windows用户,您可以导航到安装Chrome的文件夹并设置

  

chrome.exe --user-data-dir =“C:/ temp”--disable-web-security

确保在执行此操作之前关闭所有Chrome实例,否则无效。