如何区分两个地址是同站(Same site)还是跨站(Cross site)?

6,776 阅读2分钟

今天在掘金上读到了 冴(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.iob.github.io 却是跨站呢?——因为 github.io 在公共后缀列表里,但 taobao.com 不在公共后缀列表里(完整的公共后缀列表参见这里:publicsuffix.org/list/public…

image.png

而什么是网站(Site)呢?即“公共后缀和它前面那个名称的结合(出处)”

也就是说, taobao.com 实际是“名称(taobao)+公共后缀(.com)”的结合,它指一个网站,而a.taobao.com 和 b.taobao.com 是这个网站下面的子域名,同属一个网站。而 a.github.io 可不是 github.io 下的子域名,因为 github.io 本身是公共后缀,因此与“a”结合后,就是一个网站,所以跟 b.github.io 是跨站的关系。

**更新:2020/04/23**

两个地址是否是“同一站点”,还要考虑到使用的协议,即:

同一站点 = 根域名(例如,taobao.com)+ 协议(例如,https:// 或者 http://)

比如:下面两个地址,因为协议不同,就不是同一站点。

# 这不是同一站点
http://taobao.com
https://taobao.com

(正文完)


广告时间(长期有效)

我有一位好朋友开了一间猫舍,在此帮她宣传一下。现在猫舍里养的都是布偶猫。如果你也是个爱猫人士并且有需要的话,不妨扫一扫她的【闲鱼】二维码。不买也不要紧,看看也行。

(完)