圖解URL、URI和URN 區別

作為一名開發人員,特別的前端開發人員,已經無數次的聽到過 URL 和 URI,對于 URN 可能聽過的要少點,那么它們之間有什么區別呢?本文帶大家鞏固一下基本概念。
什么是URL?
統一資源定位符(Uniform Resource Locator,縮寫:URL),是對資源的引用和訪問該資源的方法。俗稱網址,就是瀏覽器地址欄里面的。

一個 URL 由以下不同的部分組成:
- 協議:通常是 https 或 http,一種告訴瀏覽器或者設備如何訪問資源的方法,當然還有其他的協議,如
ftp、mailto或者file。 - 接下來是
://。 - 主機名:表示 IP 地址的注冊名稱(域名) 或 IP 地址,用于識別連接到網絡的設備的數字標識符。
- 后面是可選的端口好,前面是冒號
:。 - 路徑:可以引用文件系統路徑,通常作為一個代碼段使用。
- 參數:以問號開頭的可選查詢參數,其中多個參數用
&連接 - hash:用于為頁面上的標題提供快速鏈接,如錨點鏈接。
上面是 URL 組成部份的簡介,為了更加直觀,如下圖所示:

什么是URI?
上面介紹了 URL 是如何構成的,現在來介紹一下什么是 URI,與 URL 類似,統一資源標志符(Uniform Resource Identifier,縮寫:URI),提供了一種識別資源的方法。但與 URL 不同的是,URI 不提供定位所述資源的方法。
URI 的最常見的形式是統一資源定位符(URL),經常指定為非正式的網址。由此,可以看出 URI 是 URL 的超集,并且每個 URL 本質上也是一個 URI。
什么是URN?
統一資源名稱(Uniform Resource Name,縮寫:URN)是統一資源標識(URI)的歷史名字,使用 urn: 作為 URI 方案。
URN 也是 URI 的子集。URN 的一個最好的例子是 ISBN 號,它被用來唯一地識別一本書。URN 與 URL 完全不同,因為它不包含任何協議。
URL和URI的差異
在前面《JavaScript中的Set數據操作》中介紹過使用 Set 求子集,其實URL和URI的差異就是一個子集的關系,如下圖:

實際上,URL是URI的一種類型,它包括關于如何訪問資源的信息。在 RFC3986 中的這樣一句話:
術語“統一資源定位器”(URL)指的是 URI 的子集,除了標識資源外,它還通過描述資源的主要訪問機制提供了一種定位資源的方法。
URI、URN、URL
從集合的角度來考慮,URN 和 URL 都是 URI 的子集,如圖所示:

下面以一個網址為例,清晰的展示 URI、URN、URL 三者的內容,可以更加直觀的反應三者的關系:

從概念上總結三者的關系的話,如圖:

URL :指定位置的 URIURN :指定名稱的 URIURI :同時指定名稱和位置的 URI
總結
作為 Web 開發人員,日常有必要去了解并熟悉一些常用的專業術語及縮寫,對于這些術語設計的技術概念理解越深,是有助于提升開發技能。