该请求被重定向到“https://..com/site/login?”,这对于需要预检的跨域请求是不允许的

Posted

技术标签:

【中文标题】该请求被重定向到“https://..com/site/login?”,这对于需要预检的跨域请求是不允许的【英文标题】:The request was redirected to 'https://..com/site/login?', which is disallowed for cross-origin requests that require preflight 【发布时间】:2015-03-18 04:05:57 【问题描述】:

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

我正在尝试访问将执行 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” 访问。

任何建议或解决方法将不胜感激。

【问题讨论】:

访问控制标头通常应该由浏览器自动添加,而不是由您明确设置。你试过删除它们吗? @MichaelAaronSafyan 如果我删除它们,我收到以下错误请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'localhost:8080'。 这种添加header客户端的方法很有意思。通常,我已经看到Access-Control-Allow-Origin 标头集服务器端来控制对给定资源的访问... @War10ck 有人建议尝试在客户端使用标头,所以我只是尝试了。 请参阅***.com/questions/34949492/… 的答案,了解如何解决此问题的详细信息。此外,正如那里所指出的,这种对重定向的限制不再在规范中,但浏览器需要更新其实现以匹配规范更改。 【参考方案1】:

是的,您遇到了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 会弹出。如果您在顶部看到安全警告,您就会知道它有效。警告看起来像这样

并且在执行此操作时当然要小心谨慎。我不会在这种模式下上网,但在本地工作应该没问题。

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

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

确保在执行此操作之前关闭所有 Chrome 实例,否则将无法正常工作。

【讨论】:

以上是关于该请求被重定向到“https://..com/site/login?”,这对于需要预检的跨域请求是不允许的的主要内容,如果未能解决你的问题,请参考以下文章

为啥在发送 Mailchimp API oauth2 初始请求后我没有在浏览器中被重定向?

登录后重定向到请求的最后一页

在 Hybris CCV2 中,页面被重定向到登录页面

apache_conf 将其添加/重命名为.htaccess并将其放在WordPress wp-content / uploads目录中。丢失上传的请求将被重定向到

如何知道我将被重定向到的 url? [nodejs] [节点获取]

Django视图绕过渲染请求