今天在掘金上读到了 冴(yà)羽 同学的写的一篇文章《Cookie 的 SameSite 属性》,写得挺好。
对下面一段话,我还想做点补充。
Cookie中的「同站」判断比较宽松:只要两个 URL 的 eTLD+1 相同即可,不需要考虑协议和端口。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 则表示,有效顶级域名+二级域名,例如 taobao.com 等。
举几个例子,www.taobao.com 和 www.baidu.com 是跨站,www.a.taobao.com 和 www.b.taobao.com 是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。
其实,把 .com
、.co.uk
、.github.io
都叫做“顶级域名”很有误导性,应该是:.com
是一级域名,.co.uk
、.github.io
是二级域名,它们都叫“公共后缀”。
“公共后缀”是判断两个域名是否是同一地址的重要因素。大家想一想:为什么 a.taobao.com
和 www.b.taobao.com
是同站,a.github.io
和 b.github.io
却是跨站呢?——因为 github.io
在公共后缀列表里,但 taobao.com
不在公共后缀列表里(完整的公共后缀列表参见这里:publicsuffix.org/list/public…)
而什么是网站(Site)呢?即“公共后缀和它前面那个名称的结合(出处)”
也就是说, taobao.com
实际是“名称(taobao
)+公共后缀(.com
)”的结合,它指一个网站,而a.taobao.com
和 b.taobao.com
是这个网站下面的子域名,同属一个网站。而 a.github.io
可不是 github.io
下的子域名,因为 github.io
本身是公共后缀,因此与“a”结合后,就是一个网站,所以跟 b.github.io
是跨站的关系。
两个地址是否是“同一站点”,还要考虑到使用的协议,即:
同一站点 = 根域名(例如,taobao.com)+ 协议(例如,https:// 或者 http://)
比如:下面两个地址,因为协议不同,就不是同一站点。
# 这不是同一站点
http://taobao.com
https://taobao.com
(正文完)
广告时间(长期有效)
我有一位好朋友开了一间猫舍,在此帮她宣传一下。现在猫舍里养的都是布偶猫。如果你也是个爱猫人士并且有需要的话,不妨扫一扫她的【闲鱼】二维码。不买也不要紧,看看也行。
(完)