瞭解 "相同網站";"相同來源";

使用者經常引用「相同網站」和「相同來源」,但經常會誤解條款。舉例來說,頁面轉換、fetch() 要求、Cookie、開啟彈出式視窗、內嵌資源和 iframe 等情境都會提及這些事件。

來源

來源

「Origin」是由配置 (也稱為通訊協定,例如 HTTPHTTPS)、主機名稱 以及 通訊埠 (如有指定) 的組合。例如,假設網址是 https://www.example.com:443/foo,則「origin」是 https://www.example.com:443

「same-origin」和「cross-origin」

使用相同配置、主機名稱和通訊埠組合的網站,會被視為「相同來源」。其他所有項目都會視為「跨來源」。

來源 A 來源 B 說明起點 A 和 B 是否為「相同來源」或「跨來源」
https://www.example.com:443 https://www.evil.com:443 跨來源:不同網域
https://example.com:443 跨來源:不同的子網域
https://登入.example.com:443 跨來源:不同的子網域
http://www.example.com:443 跨來源:不同配置
https://www.example.com:80 Cross-origin:不同通訊埠
https://www.example.com:443 相同來源:完全比對
https://www.example.com same-origin:隱性通訊埠號碼 (443) 比對

網站

網站 (TLD+1)

.com.org頂層網域 (TLD) 會列在根區域資料庫中。在上述範例中,「網站」是配置TLD 和網域前的部分 (我們稱之為 TLD+1)。例如,假設網址為 https://www.example.com:443/foo,則「網站」為 https://example.com

公開尾碼清單和 eTLD

針對包含 .co.jp.github.io 的網域,只使用 .jp.io 並不足以識別「網站」。您無法透過演算法判斷特定 TLD 的可註冊網域層級。這就是在公開尾碼清單中定義的公開後置字串清單的原因。這些公開尾碼也稱為「有效的 TLD (eTLD)」。eTLD 清單請見 publicsuffix.org/list

如要找出包含 eTLD 的網域「網站」部分,請套用與 .com 範例相同的做法。以 https://www.project.github.io:443/foo 為例,配置為 https、eTLD 為 .github.io,eTLD+1 則為 project.github.io,所以系統會將 https://project.github.io 視為這個網址的「site」。

網站 (eTLD+1)

「相同網站」和「跨網站」

系統會將採用相同架構和 eTLD+1 的網站視為「相同網站」。而配置不同或 eTLD+1 的網站屬於「跨網站」。

來源 A 來源 B 說明起點 A 和 B 是否為「同網站」或「跨網站」
https://www.example.com:443 https://www.evil.com:443 跨網站:不同網域
https://登入.example.com:443 相同網站:不同的子網域沒有影響
http://www.example.com:443 跨網站:不同配置
https://www.example.com:80 相同網站:不同的通訊埠沒有影響
https://www.example.com:443 相同網站:完全比對
https://www.example.com same-site: 通訊埠沒有影響

「不配置相同網站」

無配置的相同網站

「相同網站」的定義已演變為將網址配置視為網站的一部分,以免使用 HTTP 做為弱管道。沒有配置比較的「相同網站」這個舊概念現已改稱「無配置的相同網站」。舉例來說,系統會將 http://www.example.comhttps://www.example.com 視為無配置的相同網站,但並非同網站,因為只有 eTLD+1 部分很重要,且系統不會將配置納入考量。

來源 A 來源 B 說明出發地 A 和 B 是否為「無配置的相同網站」
https://www.example.com:443 https://www.evil.com:443 跨網站:不同網域
https://登入.example.com:443 配置不相同的網站:不同子網域沒有影響
http://www.example.com:443 不同配置:不同配置都沒有影響
https://www.example.com:80 不設定相同網站:不同的通訊埠沒有影響
https://www.example.com:443 無配置相同網站:完全比對
https://www.example.com schemeless same-site: 通訊埠不重要

如何確認要求是「相同網站」、「相同來源」還是「跨網站」

所有新式瀏覽器 (Safari 支援即將到達) 會傳送要求與 Sec-Fetch-Site HTTP 標頭。標頭具有下列其中一個值:

  • cross-site
  • same-site
  • same-origin
  • none

您可以檢視 Sec-Fetch-Site 的值,判斷要求是「相同網站」、「相同來源」還是「跨網站」要求。