关于cookie domain中的点前缀

今天同事遇到一个问题,大概描述如下:

浏览器已经接收指令,之前在一级域名下存储了相关的信息。这里为了简化问题,假设我们有两个应用A和B,域名分别为:a.b.comc.a.b.com。(显然B是A的一个子域)。

上面的描述就是:在.b.com这个一级域名下,我们已经成功写入了一个cookie,假设为:b=level1

在正常用户的浏览行为中,应用A会向自己的域下写入a=level2(domain:a.b.com)。

在A正常的页面中,有些场景会有异步的请求发出到B应用的页面(用于获取数据),合理的一种想法是: 发送到B应用的请求,应该携带着上面的b=level1a=level2这两个cookie信息到B应用的服务器去才对。但是,实际的情况是,b=level1被如愿携带上来,但是a=level2这个信息却被丢弃了!(确切的说是没有跟着request一起被发送到B的服务端)。

为啥?在访问子域应用时,不是父域名下的cookie都应该被携带上来吗?就像上面的b=level1那样?

其实,关于这点,在cookie的RFC规范中,并没有太明显的说明,至少我没有看到,即使又看了一遍RFC6265中关于Domain Matching的描述也是如此。

但实际的使用过程中,某个域下的cookie如果希望能够被他的子域具有可见性(即可以读取),必须要注意的一点是,应该保证这个cookie在被Set的时候,应该以"."开头。回到上面的例子,之所以a=level2这个cookie没有在用户浏览器请求B应用时被携带到B的server端,就是因为a=level2这个cookie的domain不是.a.b.com,而是a.b.com

事实上,上面例子中的A应用,在向自己的域名下写入a=level2这个cookie时,压根就没有显式的设置domain这个属性,这样一来,浏览器接受到这个Set Cookie的请求时,就会以默认以当前应用的域名作为cookie的domain。(不过据说某些版本的Firefox到是会自作聪明的在当前域名的前面自动加上一个点,这个待验证!)

这一个小点的区别,还是很容易被忽略的,不过产生的浏览行为还是有细微差别的。(涉及到cookie是否上传,是否占用网络流量等)

PS:关于上面说到的那个问题,stackoverflow上的这个有个截图,看着说明就直观很多了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: CookieDomain属性用于指定可以访问该Cookie的域名范围。默认情况下,CookieDomain属性值为请求的地址。如果要在多个域名之间共享Cookie,可以将CookieDomain属性设置为这些域名的公共父域名。例如,如果域A为t1.study.com,域B为t2.study.com,要在这两个域名之间共享Cookie,就需要将CookieDomain属性设置为.study.com。这样,两个域名下的网页都可以访问该Cookie。注意,一般在域名前需要加一个".",如"domain=.study.com"。\[2\] 另外,如果在设置Cookie时没有显式声明Domain属性,浏览器会根据当前的域名进行特殊处理。在火狐浏览器,该Cookie的信息会有一个主机项,而域项会消失。在Chrome浏览器,虽然有域这个项,但域的前面少了一个。因此,如果显式声明了Domain属性,不管域是否带,到Chrome浏览器都是带存储的。只有在没有显式声明域的情况下,浏览器存储的域会去掉。例如,在e.f.com.cn服务主机生成的Cookie,只有e.f.com.cn的服务器能够获取到,子域名无法获取到这个Cookie。\[3\] #### 引用[.reference_title] - *1* *2* [cookiedomain属性](https://blog.csdn.net/longgege001/article/details/81274088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [前端----cookie的域:domain](https://blog.csdn.net/q5706503/article/details/83046884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值