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

今天在掘金上读到了 一篇文章《Cookie 的 SameSite 属性》,写得挺好。git

对下面一段话,我还想作点补充。github

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 是跨站(注意是跨站)。web

其实,把 .com.co.uk.github.io 都叫作“顶级域名”颇有误导性,应该是:.com 是一级域名,.co.uk.github.io 是二级域名,它们都叫“公共后缀”。cookie

“公共后缀”是判断两个域名是不是同一地址的重要因素。你们想想:为何 a.taobao.com和 www.b.taobao.com 是同站,a.github.iob.github.io 倒是跨站呢?——由于 github.io 在公共后缀列表里,但 taobao.com 不在公共后缀列表里(完整的公共后缀列表参见这里:publicsuffix.org/list/public…post

image.png

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

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

(完)code

相关文章
相关标签/搜索