圖解URL、URI和URN 區(qū)別

什么是URL?

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

什么是URI?
上面介紹了 URL 是如何構(gòu)成的,現(xiàn)在來介紹一下什么是 URI,與 URL 類似,統(tǒng)一資源標(biāo)志符(Uniform Resource Identifier,縮寫:URI),提供了一種識別資源的方法。但與 URL 不同的是,URI 不提供定位所述資源的方法。
URI 的最常見的形式是統(tǒng)一資源定位符(URL),經(jīng)常指定為非正式的網(wǎng)址。由此,可以看出 URI 是 URL 的超集,并且每個(gè) URL 本質(zhì)上也是一個(gè) URI。
什么是URN?
統(tǒng)一資源名稱(Uniform Resource Name,縮寫:URN)是統(tǒng)一資源標(biāo)識(URI)的歷史名字,使用 urn: 作為 URI 方案。
URN 也是 URI 的子集。URN 的一個(gè)最好的例子是 ISBN 號,它被用來唯一地識別一本書。URN 與 URL 完全不同,因?yàn)樗话魏螀f(xié)議。
URL和URI的差異
在前面《JavaScript中的Set數(shù)據(jù)操作》中介紹過使用 Set 求子集,其實(shí)URL和URI的差異就是一個(gè)子集的關(guān)系,如下圖:

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

下面以一個(gè)網(wǎng)址為例,清晰的展示URI、URN、URL 三者的內(nèi)容,可以更加直觀的反應(yīng)三者的關(guān)系:

從概念上總結(jié)三者的關(guān)系的話,如圖:

URL :指定位置的 URI URN :指定名稱的 URI URI :同時(shí)指定名稱和位置的 URI
總結(jié)
作為 Web 開發(fā)人員,日常有必要去了解并熟悉一些常用的專業(yè)術(shù)語及縮寫,對于這些術(shù)語設(shè)計(jì)的技術(shù)概念理解越深,是有助于提升開發(fā)技能。
