Skip to content

[Internet] URL 和 domain 組成初探

· 7 min

前言#

在讀《Beyond XSS:探索網頁前端資安宇宙》這本書時,作者 Huli 在提到 origin 和 site 時用了 URL 組成要素的名稱(e.g. scheme、host、port 等)來說明,而自己對這部分不太熟悉,所以在這篇簡單筆記一下 URL 和 domain 的組成,主要是用來讓自己看懂書中的敘述~

什麼是URL#

URL 的全名是 Uniform Resource Locator,平常我們都稱為網址,它是一種用來指定網路資源位置的方法,並說明如何存取該資源的技術。當我們在瀏覽器輸入網址時,就是在告訴瀏覽器說你想要前往哪個網站、瀏覽哪些資源。

URL 的組成#

一般 URL 的組成結構大概是這樣:

scheme://username:password@host:port/path?query#fragment

以上元素不是每個 URL 都會有,有些是可選的,可以參考 wikipedia 的示意圖:

URL 結構示意圖(資料來源:https://en.wikipedia.org/wiki/URL)

另外也附上 MDN 舉例的示意圖,可對應 URL 各部分屬於哪個元素:

URL 舉例結構對應(資料來源:https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL)

如果不知道一段 URL 中的各組成是什麼,可用 url-parts.glitch.me 來查詢,輸入 URL 後就會標示出對應組成:

host 與 domain 差異#

host 是 URL 中必需的部分,代表資源的主機名,它可以是 domain(如 example.com)或 IP 地址(如 127.0.0.1)。

domain 嚴格來說算是一種特殊形式的 host(基於 DNS),指代由 domain 系統管理的名稱,若 URL 中的 host 是 IP 地址,那 domain 通常被認為是 null 或不存在。

什麼情況下 domain 為 null?

http://192.168.1.1:8080/
Host: 192.168.1.1
Domain: null
http://localhost:3000/
Host: localhost
Domain: null
/path/to/resource
Host: null
Domain: null

Domain(域名)的組成#

簡單介紹 domain 的組成元素,以下是一個以英文維基百科的域名為例的各層次的域名圖表:

以英文維基百科的域名分析結構的示意圖(資料來源:https://en.wikipedia.org/wiki/Domain_name)

domain 結構由右至左來看,可分為:

  1. 根域(Root Domain):位於 domain 最右端,隱式表示為 .,所有網域名稱的尾部實際上都有一個根網域名稱,但平常通常省略。
    舉例來說,www.example.com. 真正 domain 全稱是 www.example.com.root

  2. 頂級域 (Top-Level Domain, TLD):最高層級的網域,位於根域左側,但通常根域隱藏,所以通常 TLD 是網址的最後一個部分。
    頂級網域可分兩類:
    (1) 一般性頂級網域(general TLD, gTLD):表示特定用途或類型如:.com.net.org等,是由 ICANN (Internet Corporation for Assigned Names and Numbers)管理的,每個人都可申請自己的網域
    (2) 國別頂級網域(country-code TLD, ccTLD):表示特定國家或地區的域名,如:.tw.jp

  3. 二級域名/次級域名(Second-Level Domain, SLD):位於 TLD 左側,代表網站核心標識。舉例來說example.com 中的 example 是次級域名。

  4. 子域(Subdomain):位於次級域左側,由域名所有者自定義,用來劃分不同功能或服務。例如www.example.com 中的 wwwsubdomain

以上是簡單版介紹 domain,還有 eTLD、eTLD+1、Public suffix、Registrable domain 這些名詞,會在 [Security] 細究 Same-origin policy 與 same site 這篇文章中介紹。


Reference:#

如有任何問題歡迎聯絡、不吝指教✍