javascript – POST在服务器上成功但在浏览器中导致CORS错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – POST在服务器上成功但在浏览器中导致CORS错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2966字,纯文字阅读大概需要5分钟。
内容图文
![javascript – POST在服务器上成功但在浏览器中导致CORS错误](/upload/InfoBanner/zyjiaocheng/709/4c5a2b70ab284baaad866f2840278679.jpg)
我对微软登录进行HTTP POST请求以获取与邮件API一起使用的访问令牌,请求成功但代码转到我的代码的错误子句.
requestAccessToken(code: string)
{
console.log("request access token");
if (code) {
var headers = new Headers();
headers.append("Content-Type", 'application/x-www-form-urlencoded');
headers.append('Accept', 'application/json');
var requestoptions = new RequestOptions({
headers: headers
});
var body = `grant_type=authorization_code&
redirect_uri=http://localhost:4200&
code=`+ code + `&
client_id=4e[................]5ab&
client_secret=CE[..............]BC`;
this.http.post("https://login.microsoftonline.com/common/oauth2/v2.0/token", body, requestoptions).map((res: Response) =>
{
console.log("response given");
const data = res.json();
}).subscribe( (data) => {
console.log("The data is = " + data);
}, error => {
console.log("The error is = " + error)
});
}
浏览器控制台显示:
XMLHttpRequest无法加载https://login.microsoftonline.com/common/oauth2/v2.0/token.请求的资源上不存在“Access-Control-Allow-Origin”标头.因此,不允许原点’http://localhost:4200‘进入.
zone.js:2019 XHR加载失败:POST“https://login.microsoftonline.com/common/oauth2/v2.0/token”.
outlook.service.ts:96错误是=响应状态:0表示URL:null
这是一个截图,以更好地展示它
现在真正的问题是我的请求成功如下所示:
并且响应显示了我的访问令牌.那么为什么我不能从代码中获取它呢?为什么它会出现错误条款.
解决方法:
当您将跨域POST发送到其响应中不包含Access-Control-Allow-Origin响应头的服务器时,您所看到的是预期的行为.
具体来说,只要您的跨源请求没有在执行POST请求之前导致浏览器执行preflight OPTIONS request的特性(您的请求没有),那么POST请求将在服务器端成功 – 但是,因为从服务器到该POST请求的响应不包括Access-Control-Allow-Origin响应头,您的浏览器阻止您的前端代码能够实际看到服务器发送的响应.
但是,如果您打开浏览器devtools,您仍然可以在那里看到响应.但仅仅因为浏览器收到了响应并且您可以在devtools中看到它,并不意味着浏览器会将响应暴露给您的代码.它只有在具有Access-Control-Allow-Origin时才会公开它.
这一切似乎都是违反直觉的,但如果你记得浏览器是强制执行跨源限制的唯一点,那一切都是有道理的.服务器不会阻止跨源请求.
当您发送该POST请求的服务器接收请求时,它不会检查原点以决定是否响应.服务器只接受POST请求并对其进行处理,然后发送响应.但随后浏览器阻止您的代码访问该响应.
但同样重要的是要记住,浏览器不会阻止您的代码发送该POST请求的跨源.当请求具有触发浏览器执行preflight的质量(如特殊标头)时,浏览器仅阻止发送跨源请求.
因此,由于您的POST请求不是触发预检的请求,因此浏览器会发送它并成功.
为了便于比较,请考虑跨源GET请求会发生什么.在这种情况下,只要GET请求不是触发预检的那个,浏览器就不会拒绝发送它.相反,浏览器将请求发送到服务器,无论如何.服务器接收该GET请求并发送响应.
只有当响应返回到浏览器时才会发生不同的事情 – 因为在这种情况下,如果响应不包含Access-Control-Allow-Origin响应头,那么您的浏览器将不允许您的前端JavaScript代码来访问它.
但很明显,因为发出GET请求的整个过程就是对响应执行某些操作,那么在这种情况下,如果您的代码无法访问响应,那么这是一个很难的完全失败 – 与POST请求的情况相反,请求正文实际上仍然按预期发布,但您只是没有办法让代码检查响应以查看请求是否成功.
内容总结
以上是互联网集市为您收集整理的javascript – POST在服务器上成功但在浏览器中导致CORS错误全部内容,希望文章能够帮你解决javascript – POST在服务器上成功但在浏览器中导致CORS错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。