Cookie跨域问题
假设有两个网站 A: www.a.com 与 B: www.b.com
- 跨域请求的cookie存储问题
在A域名的站点下请求了B域名,假设访问成功且发送的请求返回了cookie,那么此时浏览器保存该cookie的domain是 www.b.com,也就是说请求的是哪个地址,对应的请求返回的cookie的domian就是那个请求地址,和当前的域名无关。不会将B网站返回的cookie的域名设置为www.a.com。
- 跨域请求的cookie携带问题
在站点A下面访问B域名的接口,那么这是一个跨域请求,如果不做处理,此时这个请求就跨域了,浏览器在接收到响应以后会直接报错。那么这个时候如何让浏览器允许跨域请求?通常有2中解决办法:1.设置代理 2.服务器在响应头中添加 allow-origin。
解决跨域以后,如何允许跨域请求携带cookie,例如访问B的接口,默认情况下是不允许带cookie的,此时需要设置axios的withcredentials的属性为true,告诉浏览器在访问B网站时,将B网站的cookie带上,此时光前端设置还不行,还需要后端在响应头中添加 allow-withcredentials = true,这样就可以保证跨域请求也可以携带cookie。
Cookie共享问题
cookie的作用域和域名有关,和协议以及端口无关。
- path属性
cookie的path属性决定了访问该域名的那些路径时可以携带cookie,当一个tomcat部署多个服务时,将path设置为/,则访问所有tomcat项目时都可以携带。
- domain属性
cookie的domain属性才是决定了访问哪个域名时可以携带哪些cookie,服务器可以手动设置domian,默认的domain就是请求url中的域名,但是服务器也可以设置当前域名的子域名,但是不允许设置其他域名,如果设置了其他域名,会直接被浏览器丢弃。 例如,访问 www.baidu.com ,则 服务器可以设置cookie的域名为 www.baidu.com、.baidu.com、baike.baidu.com。当baidu.com下的子域名访问时,也可以携带上.baidu.com的cookie,例如当前网站是 www.baike.baidu.com,访问baike的请求时也可以携带 baidu.com的cookie。利用这个特性也可以实现多个相互信任系统之间的单点登录问题。文章来源:https://uudwc.com/A/ABYLa
文章来源地址https://uudwc.com/A/ABYLa