今天在掘金上读到了 一篇文章《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.io
和 b.github.io
倒是跨站呢?——由于 github.io
在公共后缀列表里,但 taobao.com
不在公共后缀列表里(完整的公共后缀列表参见这里:publicsuffix.org/list/public…)post
而什么是网站(Site)呢?即“公共后缀和它前面那个名称的结合(出处)”网站
也就是说, taobao.com
实际是“名称(taobao
)+公共后缀(.com
)”的结合,它指一个网站,而a.taobao.com
和 b.taobao.com
是这个网站下面的子域名,同属一个网站。而 a.github.io
可不是 github.io
下的子域名,由于 github.io
自己是公共后缀,所以与“a”结合后,就是一个网站,因此跟 a.github.io
是跨站的关系。spa
(完)code