首頁 > 軟體

你知道URL、URI和URN三者之間的區別嗎?

2020-06-16 17:52:24

這是一個經典的技術爭論,許多人都會自問:URL、URI,很可能還有URN,它們之間的區別是什麼。雖然,現在我們簡單地把 URN 和 URL 都看做 URI,但嚴格來說URI可以進一步劃分為URL、URN或者這兩者的組合,所以了解這三者之間的區別將會非常有趣並讓人受益匪淺。如果你恰好在某個地方碰到了這些東西,那麼至少應該知道它們的含義。

我認為,儘管對一般人來說,不了解這三個縮略詞之間的技術差異以及它們各自的含義並不是什麼問題。但是,如果你作為一個電腦科學家、一個Web開發者、一個系統管理員,或者更籠統地說,你工作在IT領域,那麼了解這些知識就非常有必要了。

這篇文章旨在於清楚地講解URL、URI和URN之間的區別,幫助你快速理解這些必備知識。你是不是對這個話題也感到困惑?那麼我們開始吧!

 

起源

這三個縮略詞是Tim Berners-Lee在一篇名為RFC 3986: Uniform Resource Identifier (URI): Generic Syntax的文件中定義的網際網路標準追蹤協定。

引文:

統一資源識別符號(URI)提供了一個簡單、可延伸的資源標識方式。URI規範中的語意和語法來源於全球資訊網全球資訊主動引入的概念,全球資訊網從1990年起使用這種識別符號資料,並被描述為“全球資訊網中的統一資源描述符”。

 

區別

首先我們要弄清楚一件事:URL和URN都是URI的子集

換言之,URL和URN都是URI,但是URI不一定是URL或者URN。為了更好的理解這個概念,看下面這張圖片。

通過下面的例子(源自 Wikipedia),我們可以很好地理解URN 和 URL之間的區別。如果是一個人,我們會想到他的姓名和住址。

URL類似於住址,它告訴你一種尋找目標的方式(在這個例子中,是通過街道地址找到一個人)。要知道,上述定義同時也是一個URI。

相對地,我們可以把一個人的名字看作是URN;因此可以用URN來唯一標識一個實體。由於可能存在同名(姓氏也相同)的情況,所以更準確地說,人名這個例子並不是十分恰當。更為恰當的是書籍的ISBN碼和產品在系統內的序列號,儘管沒有告訴你用什麼方式或者到什麼地方去找到目標,但是你有足夠的資訊來檢索到它。引自這篇文章:

所有的URN都遵循如下語法(引號內的短語是必須的):

  1. <URN>::="urn:"<NID>":"<NSS>

其中NID是名稱空間識別符號,NSS是標識名稱空間的特定字串。

 

一個用於理解這三者的例子

我們來看一下上述概念如何應用於與我們息息相關的網際網路。

再次參照Wikipedia ,這些引文給出的解釋,比上面人員地址的例子更為專業:

關於URL:

URL是URI的一種,不僅標識了Web 資源,還指定了操作或者獲取方式,同時指出了主要存取機制和網路位置。

關於URN:

URN是URI的一種,用特定名稱空間的名字標識資源。使用URN可以在不知道其網路位置及存取方式的情況下討論資源。

現在,如果到Web上去看一下,你會找出很多例子,這比其他東西更容易讓人困惑。我只展示一個例子,非常簡單清楚地告訴你在網際網路中URI 、URL和URN之間的不同。

我們一起來看下面這個虛構的例子。這是一個URI

  1. http://bitpoetry.io/posts/hello.html#intro

我們開始分析 http://是定義如何存取資源的方式。另外 bitpoetry.io/posts/hello.html是資源存放的位置,那麼,在這個例子中, #intro是資源。 

URL是URI的一個子集,告訴我們存取網路位置的方式。在我們的例子中,URL應該如下所示:

  1. http://bitpoetry.io/posts/hello.html

URN是URI的子集,包括名字(給定的名稱空間內),但是不包括存取方式,如下所示: 

  1. bitpoetry.io/posts/hello.html#intro

就是這樣。現在你應該能夠辨別出URL和URN之間的不同。

如果你忘記了這篇文章的內容,至少要記住一件事:URI可以被分為URL、URN或兩者的組合。如果你一直使用URI這個術語,就不會有錯。

為了糾正一些錯誤,已經更新了這篇文章。如果你發現新的錯誤,無論是技術上的還是語法上的,請不要猶豫,告訴我們吧!

 


IT145.com E-mail:sddin#qq.com