浏览器发送cookie规则

时间:2024-03-22 20:56:40

一、场景再现

当前一个需求,前端不同的域名去请求同一个后端域名服务,导致cookie共用相互影响。

例子:

http://m.test1.com、http://m.test2.com、http://m.test3.com

用户访问以上3个链接时,后端请求访问的服务为同一个:http://meng.test.com

解决方案:

跨域过程中要尽量避免多对一的映射,采用一对一的方式。

将每一个前端域名都对应唯一一个后端服务域,分别映射:

http://meng.test1.com、http://meng.test2.com、http://meng.test3.com

后续:

再解决互斥cookie的问题之后,又出现了传多个同名cookie的情况,如图:

浏览器发送cookie规则

原因是由于之前 http://m.test2.com、http://m.test3.com 登录过的cookie仍旧存在本地,当用户再次请求原后端URL

http://meng.test.com 此时会把不同前端URL所保留的cookie 一并传给后端。

浏览器发送cookie规则

有一点需要注意,设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以你是访问不了这些cookie的。

 

二、Cookie介绍

Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。

浏览器发送cookie规则

HTTP请求,Cookie的使用过程:

1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client

2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server

3、每次HTTP请求,Cookie都会被发送。

HTTP请求发送Cookies的条件:

1、本地已经缓存有cookies

2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发送。

举个例子:访问www.baidu.com时,就不发送www.qq.com的cookies.

Cookies查看:

大家可以使用抓包工具,这种工具就不多说,网上搜索出很多。使用这些工具中可以清晰的看到Http Request 中的Cookie, 和Http Response中的cookie

 

参考文献:HTTP请求中cookies的使用