一次搞懂 URI、URL、URN
一次搞懂 URI、URL、URN
簡介
在使用網路相關的 API 又或是資訊傳輸、甚至微服務配置時常常看到 URI、URL 交錯著出現,而與之相似的還有一個叫做 URN 的東西。平常最常接觸到的就是 URL,通常在前後端的場景就把它當成請求的路由就算了,本篇就來細細品味這三個符號到底差在哪吧。
參考
正文
名詞解釋
先來看看三個符號的說明
識別符號 | 全稱 | 作用 |
---|---|---|
URI | Uniform Resource Identifier 統一資源標誌符 | 唯一標識資源 |
URL | Uniform Resource Locator 統一資源定位符 | 唯一定位資源位置 |
URN | Uniform 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
名稱空間:可以看作是資源的命名方式,例如isbn
、isan
、issn
、ietf:rfc
、mpeg: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:0451450523 | The 1968 book The Last Unicorn, identified by its book number. |
urn:isan:0000-0000-9E59-0000-O-0000-0000-2 | The 2002 film Spider-Man, identified by its audiovisual number. |
urn:issn:0167-6423 | The scientific journal Science of Computer Programming, identified by its serial number. |
urn:ietf:rfc:2648 | The IETF’s RFC 2648. |
urn:mpeg:mpeg7:schema:2001 | The default namespace rules for MPEG-7 video metadata. |
urn:oid:2.16.840 | The OID for the United States. |
結語
這樣算是有解釋到三個符號吧(參考了算是比較完整正式的解釋),網上還有很多其他抽象或是比喻的解釋,還是不太懂的就自己查一查吧hhh。
相關文章
- URL、URI與URN 區別
- url和uri區別
- url和uri的區別
- WPF image via web url or uriWeb
- uri和url的區別
- 【思考】URI和URL的區別?以及URL的結構
- 前端基礎迴歸-URI和URL前端
- HTTP協議中URI和URL區別HTTP協議
- [前端 · 面試 ]HTTP 總結(十二)—— URL 和 URI前端面試HTTP
- 【前端 · 面試 】HTTP 總結(十二)—— URL 和 URI前端面試HTTP
- 這一次搞懂SpringMVC原理SpringMVC
- HTTP基礎系列之:一文搞懂URLHTTP
- URL URI傻傻分不清楚,dart告訴你該怎麼用Dart
- 女朋友看了會生氣的回答 URI和URL有什麼區別?
- 最後一次搞懂 Event LoopOOP
- data URI
- 這一次,徹底搞懂 Go CondGo
- Java3種IO模型,一次搞懂!Java模型
- 一次搞懂MySQL(所有)索引及其區別MySql索引
- 一次性搞懂JavaScript 執行機制JavaScript
- URI 上傳中文符
- URI設計原則
- 一次性搞懂JavaScript正規表示式之方法JavaScript
- 一次性搞懂JavaScript正規表示式之引擎JavaScript
- 一次性搞懂js中的原型與原型鏈JS原型
- 一次性搞懂JavaScript正規表示式之語法JavaScript
- 一次搞懂資料大屏適配方案 (vw vh、rem、scale)REM
- 這一次搞懂Spring代理建立及AOP鏈式呼叫過程Spring
- 這一次搞懂SpringBoot核心原理(自動配置、事件驅動、Condition)Spring Boot事件
- 這一次搞懂Spring自定義標籤以及註解解析原理Spring
- 日常抄書之一次性搞懂解React生命週期React
- 如何使用`open-uri`模組
- 筆記八:URI Search 詳解筆記
- 這一次搞懂Spring Web零xml配置原理以及父子容器關係SpringWebXML
- HTTP 的前世今生:一次性搞懂 HTTP、HTTPS、SPDY、HTTP2HTTP
- 實踐這一次,徹底搞懂瀏覽器快取機制瀏覽器快取
- [WPF]淺析資源引用(pack URI)
- SpringMVC 解析(五)URI連結處理SpringMVC