CORS 跨域携带 Cookie 发送请求

问题

当在 a.com 进行访问时,如何向 b.com 携带 b.com 的 cookie 发送一个请求?前端

情境

a.com 是一个第三方网站,须要经过访问 b.com 的接口来获取用户的一些信息。这时候,b.com 上的用户已经登陆了。后端

跨域请求

咱们知道,在发送跨域请求时,须要后端设置一些请求头,不然浏览器不会容许客户端跨域发送请求。跨域

Access-Control-Allow-Origin: a.com

这样,a.com 即可以调用 b.com 的接口了。浏览器

可是,这样调用过去会发现,b.com 会返回用户未登陆。缘由是 b.com 的 cookie 没有发送过去。cookie

跨域携带 Cookie

这时候须要后端添加另一个请求头:网站

Access-Control-Allow-Credentials: true

前端在发送请求时也须要设置url

xhr = new XMLHttpRequest();
xhr.withCredentials= true;  //关键句
xhr.open("GET", url);
xhr.send();

这样,后端就能够接收到前端携带的 Cookie 了。code

总结

综上所述,前端须要在发送 XMLHttpRequest 的时候加上接口

xhr.withCredentials= true;

后端须要设置请求头(表示你信任 a.com 并容许 a.com 带上你的凭据):域名

Access-Control-Allow-Origin: a.com //这里须要换成相应的发起请求的域名
Access-Control-Allow-Credentials: true
相关文章
相关标签/搜索