资讯专栏INFORMATION COLUMN

关于cookie domain中的点前缀

Achilles / 456人阅读

摘要:今天同事遇到一个问题,大概描述如下浏览器已经接收指令,之前在一级域名下存储了相关的信息。显然是的一个子域。在正常用户的浏览行为中,应用会向自己的域下写入。

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

浏览器已经接收指令,之前在一级域名下存储了相关的信息。这里为了简化问题,假设我们有两个应用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上的这个有个截图,看着说明就直观很多了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104913.html

相关文章

  • 关于Cookie的那些事

    摘要:假设有两个域名域名域名域名有分级的概念,也就是说域名与域名都是的子域名,又是的子域名在域名所使用的服务中,可以设置域名在服务端设置的时候,设置为或没有区别,注意前面的点,即只要是为显式的声明,前面带不带点没有区别。 1 Cookie简介 Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制。Cookie是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某...

    sf_wangchong 评论0 收藏0
  • 关于Cookie的那些事

    摘要:假设有两个域名域名域名域名有分级的概念,也就是说域名与域名都是的子域名,又是的子域名在域名所使用的服务中,可以设置域名在服务端设置的时候,设置为或没有区别,注意前面的点,即只要是为显式的声明,前面带不带点没有区别。 1 Cookie简介 Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制。Cookie是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某...

    alogy 评论0 收藏0
  • Response Headers 的 Set-Cookie 前端读取不到 ?

    摘要:可选的最长有效时间,格林尼治标准时间。如果不传表示这是一个会话期。默认值为当前文档访问地址的主机名不包含子域名。设置的目录及其子目录都生效。可选设置了属性的不能使用经由属性和进行访问以防范跨站脚本攻击。 问题 描述 先看下后台返回的Set-Cookie字段:showImg(https://segmentfault.com/img/bVbulhz?w=858&h=128);查看浏览器Co...

    zhangqh 评论0 收藏0
  • cookie

    摘要:背景是一种无状态的协议,它不对请求和响应之间的通信状态进行保存,即无法根据之前的状态进行本次请求的处理。为了保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了。主要目的是为防止跨站脚本攻击对的信息窃取。 需求场景 一个Vue单页应用,A、B、C 三个页面都引用了一个公用的时间选择器。用户在各自页面选择完时间后,A,B,C页面互相切换时保存选择的时间,在关闭浏览器tab后,清...

    bawn 评论0 收藏0
  • cookie

    摘要:背景是一种无状态的协议,它不对请求和响应之间的通信状态进行保存,即无法根据之前的状态进行本次请求的处理。为了保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了。主要目的是为防止跨站脚本攻击对的信息窃取。 需求场景 一个Vue单页应用,A、B、C 三个页面都引用了一个公用的时间选择器。用户在各自页面选择完时间后,A,B,C页面互相切换时保存选择的时间,在关闭浏览器tab后,清...

    array_huang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<