今天在掘金上讀到了 冴(yà)羽 同窗的寫的一篇文章《Cookie 的 SameSite 屬性》,寫得挺好。git
對下面一段話,我還想作點補充。github
Cookie中的「同站」判斷比較寬鬆:只要兩個 URL 的 eTLD+1 相同便可,不須要考慮協議和端口。其中,eTLD 表示有效頂級域名,註冊於 Mozilla 維護的公共後綴列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 則表示,有效頂級域名+二級域名,例如 taobao.com 等。web
舉幾個例子,www.taobao.com 和 www.baidu.com 是跨站,www.a.taobao.com 和 www.b.taobao.com 是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。bash
其實,把 .com
、.co.uk
、.github.io
都叫作「頂級域名」頗有誤導性,應該是:.com
是一級域名,.co.uk
、.github.io
是二級域名,它們都叫「公共後綴」。markdown
「公共後綴」是判斷兩個域名是不是同一地址的重要因素。你們想想:爲何 a.taobao.com
和 www.b.taobao.com
是同站,a.github.io
和 b.github.io
倒是跨站呢?——由於 github.io
在公共後綴列表裏,但 taobao.com
不在公共後綴列表裏(完整的公共後綴列表參見這裏:publicsuffix.org/list/public…)cookie
而什麼是網站(Site)呢?即「公共後綴和它前面那個名稱的結合(出處)」oop
也就是說, taobao.com
實際是「名稱(taobao
)+公共後綴(.com
)」的結合,它指一個網站,而a.taobao.com
和 b.taobao.com
是這個網站下面的子域名,同屬一個網站。而 a.github.io
可不是 github.io
下的子域名,由於 github.io
自己是公共後綴,所以與「a」結合後,就是一個網站,因此跟 b.github.io
是跨站的關係。post
兩個地址是不是「同一站點」,還要考慮到使用的協議,即:網站
同一站點 = 根域名(例如,taobao.com)+ 協議(例如,https:// 或者 http://)spa
好比:下面兩個地址,由於協議不一樣,就不是同一站點。
# 這不是同一站點 http://taobao.com https://taobao.com 複製代碼
(正文完)
廣告時間(長期有效)
我有一位好朋友開了一間貓舍,在此幫她宣傳一下。如今貓舍裏養的都是布偶貓。若是你也是個愛貓人士而且有須要的話,不妨掃一掃她的【閒魚】二維碼。不買也沒關係,看看也行。
(完)