该请求被重定向到“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 初始请求后我没有在浏览器中被重定向?
apache_conf 将其添加/重命名为.htaccess并将其放在WordPress wp-content / uploads目录中。丢失上传的请求将被重定向到