如何區分兩個地址是同站(Same site)仍是跨站(Cross site)?

今天在掘金上讀到了 冴(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.iob.github.io 倒是跨站呢?——由於 github.io 在公共後綴列表裏,但 taobao.com 不在公共後綴列表裏(完整的公共後綴列表參見這裏:publicsuffix.org/list/public…cookie

image.png

而什麼是網站(Site)呢?即「公共後綴和它前面那個名稱的結合(出處)」oop

也就是說, taobao.com 實際是「名稱(taobao)+公共後綴(.com)」的結合,它指一個網站,而a.taobao.com 和 b.taobao.com 是這個網站下面的子域名,同屬一個網站。而 a.github.io 可不是 github.io 下的子域名,由於 github.io 自己是公共後綴,所以與「a」結合後,就是一個網站,因此跟 b.github.io 是跨站的關係。post

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

兩個地址是不是「同一站點」,還要考慮到使用的協議,即:網站

同一站點 = 根域名(例如,taobao.com)+ 協議(例如,https:// 或者 http://)spa

好比:下面兩個地址,由於協議不一樣,就不是同一站點。

# 這不是同一站點
http://taobao.com
https://taobao.com
複製代碼

(正文完)


廣告時間(長期有效)

我有一位好朋友開了一間貓舍,在此幫她宣傳一下。如今貓舍裏養的都是布偶貓。若是你也是個愛貓人士而且有須要的話,不妨掃一掃她的【閒魚】二維碼。不買也沒關係,看看也行。

(完)

相關文章
相關標籤/搜索