一次搞懂 URI、URL、URN

超悠閒發表於2020-12-13

一次搞懂 URI、URL、URN

簡介

在使用網路相關的 API 又或是資訊傳輸、甚至微服務配置時常常看到 URI、URL 交錯著出現,而與之相似的還有一個叫做 URN 的東西。平常最常接觸到的就是 URL,通常在前後端的場景就把它當成請求的路由就算了,本篇就來細細品味這三個符號到底差在哪吧。

參考

統一資源標誌符-wikipediahttps://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6
統一資源定位符-wikipediahttps://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%AC%A6
統一資源名稱-wikipediahttps://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%90%8D%E7%A7%B0
URI-百度百科https://baike.baidu.com/item/URI/2901761

正文

名詞解釋

先來看看三個符號的說明

識別符號全稱作用
URIUniform Resource Identifier 統一資源標誌符唯一標識資源
URLUniform Resource Locator 統一資源定位符唯一定位資源位置
URNUniform Resource Name 統一資源名稱唯一識別資源

從本質上來看三個符號都是用於表示網路資源,同時三個符號表示的範圍還有如下的層級關係


(圖自維基百科)

三者差異

URI 能唯一表示資源,URL 則是以資源路徑來表示資源,URN 則是根據名稱(可能附帶來源&ID)來表示資源

好了再多的文字說明只會越來越混亂,我們都喜歡看一點實際的,接下來我們就來看看三個符號的通用格式

URI 格式

首先先來看看 URI,根據維基百科,URI 通常表示成下列形式:

[協議名]://[使用者名稱]:[密碼]@[主機名]:[埠號]/[路徑]?[查詢引數]#[片段ID]

對其實本質上就跟 URL 幾乎一樣,相關歷史緣故這邊就不想說明了自己看參考連結hhh。然而 URI 可以說是 URL 和 URN 的超集,能表示的資源範圍比 URL 廣的許多,用 is-a 的關係來描述的話就是:URL、URL is-a URI

其實實際上使用的時候就只是名字問題,主要用得多的還是 URL 所以馬上來看看下一個

URL 格式

# 標準格式
[協議型別]://[伺服器位置IP]:[埠]/[資源層級路徑][資源名稱]?[查詢引數]#[片段ID]
# 完整格式
[協議型別]://[存取憑證]@[伺服器位置IP]:[埠]/[資源層級路徑][資源名稱]?[查詢引數]#[片段ID]

這時候罵孃的心都有了hhh,好先別激動,我知道根本就跟 URI 差不多,不過這就是我們最常用的 URL 格式完整表示,也就是平常我們拿來當作網址、或是一些請求路由,其實這兩件事情本質上是一個動作:請求網路資源。前者可能是請求一個網頁資源,後者可能請求伺服器的計算資源並期待著返回計算結果等。

接下來看看常見的 url 例子

https://zh.wikipedia.org:443/w/index.php?title=Special:random
https                -> 協議型別
zh.wikipedia.org     -> 伺服器位置(需要進行域名解析)
443                  -> 服務埠號
/w/index.php         -> 資源路徑
title=Special:random -> 請求引數,形如 key=value 的鍵值對

URN 格式

最後一個 URN 識別符號,常見於論文索引,格式如下

urn:[NID]:[NSS]
  • NID 名稱空間:可以看作是資源的命名方式,例如 isbnisanissnietf:rfcmpeg:mpeg7:schema
  • NSS 序號:根據 NID 的不同代表不同的意義,如:
    • isbn:此時 NSS 表示書號(book number)
    • isan:此時 NSS 表示媒體編號(audiovisual number)
    • issn:此時 NSS 表示序列號(serial number)
    • ietf:rfc:此時 NSS 表示IEFT RFC 論文
    • mpeg:mpeg7:schema:此時 NSS 表示MPEG-7 視屏型別

好再多的自己查去吧,最後一樣給幾個例子hhh

URN說明
urn:isbn:0451450523The 1968 book The Last Unicorn, identified by its book number.
urn:isan:0000-0000-9E59-0000-O-0000-0000-2The 2002 film Spider-Man, identified by its audiovisual number.
urn:issn:0167-6423The scientific journal Science of Computer Programming, identified by its serial number.
urn:ietf:rfc:2648The IETF’s RFC 2648.
urn:mpeg:mpeg7:schema:2001The default namespace rules for MPEG-7 video metadata.
urn:oid:2.16.840The OID for the United States.

結語

這樣算是有解釋到三個符號吧(參考了算是比較完整正式的解釋),網上還有很多其他抽象或是比喻的解釋,還是不太懂的就自己查一查吧hhh。

相關文章