今天在掘金上讀到了 一篇文章《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