一、前言
最近在实际开发过程中遇到一个关于跨域请求无法传递Cookie的问题。该场景大致为:我们在一个web页面a下(假如该页面的网址为a.csdn.com),然后再改页面中使用ajax请求跨域访问了一个服务器b(假如其域名为b.baidu.comm)的接口。这就是一个普通的跨域请求,在这个跨域请求中,我们期望页面a在请求服务器b的接口的时候,浏览器能够将服务器b下的cookie(baidu.com下的cookie)都携带上。这样服务器b再收到请求之后能够从cookie中获取一些C端用的信息,如pin等。大致图示如下。

我们都知道这种跨域请求默认是不会成功的,我们需要做如下两件事情,才能够确保跨域请求成功地同时携带上baidu.com下的Cookie。
1、需要在服务端B开启CORS,这样页面a的跨域请求才能够被正常处理。
2、需要web页面a在请求的参数中添加withCredentials=true属性,这样浏览器才会携带cookie到服务端B。
然而事实却不是这样,通过上述操作之后,当我们在跨域请的时候,请求能够正常达到服务端B,服务端B返回的数据浏览器端也能够正常处理。但是跨域请求的过程中浏览器没有携带Cookie到服务端B,导致部分基于C端用户信息的逻辑出错。
看到这里我也很纳闷,按照之前的经验通过上述两步处理之后。服务端B是可能能够拿到Cookie的。那么为什么这里没有传递Cookie去服务端呢?通过一些列Google操作,我终于找到了具体原因。接下来就给大家详细分析下具体原因。
二、根因分析
通过一些列Google之后,终于找到了为什么上述跨域场景下CORS和withCredentials=true都设置的场景下,Cookie仍然不传递的原因。
这是因为Google去年在Chrome开始支持Co

&spm=1001.2101.3001.5002&articleId=112200461&d=1&t=3&u=53f97d0ed3ce45dfb6c0e45f8d9b8a98)
464

被折叠的 条评论
为什么被折叠?



