HTTP中URL和URI的區別

本文爲相關討論的一些整理


URL   百度百科鏈接    

統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。  


URI    百度百科鏈接URI

統一資源標識符(Uniform Resource Identifier,或URI)是一個用於標識某一互聯網資源名稱的字符串。 該種標識允許用戶對任何(包括本地和互聯網)的資源通過特定的協議進行交互操作。URI由包括確定語法和相關協議的方案所定義。


以下是關於相關的一些經典解釋 


作者:西毒
鏈接:http://www.zhihu.com/question/21950864/answer/19833802
來源:知乎

URI屬於URL更低層次的抽象,一種字符串文本標準。

就是說,URI屬於父類,而URL屬於URI的子類。URL是URI的一個子集。

在《HTTP權威指南》一書中,對於URI的定義是:統一資源標識符;對於URL的定義是:統一資源定位符。

二者的區別在於,URI表示請求服務器的路徑,定義這麼一個資源。而URL同時說明要如何訪問這個資源(http://)。

例如,一個URL通常包括三部分:

方案部分(scheme):http://

地址部分:CEALER | 一些瞬間、一些回憶、一些經典、一些原創、一些憤怒、一些感動

資源部分:/1.png

而在C#中,URL類屬於System.Security.Policy命名空間,Uri屬於System。在MSDN對Url類的備註中,能更好的說明Url與Uri的區別:

Url 證據的存在將在授予集內生成 UrlIdentityPermission。如果有對 UrlIdentityPermission Demand,則與 Url 證據對應的 UrlIdentityPermission 將與請求的權限進行比較。

考慮完整的 URL,包括協議(HTTP、HTTPS、FTP)和文件。例如,Microsoft Home Page 就是一個完整的 URL。

URL 可以精確匹配,也可在最後一個位置使用通配符來匹配。例如,Microsoft Home Page* 就是一個含通配符的 URL。

而Uri類在實例化的時候,可以指定爲絕對路徑,相對路徑,但可以不指定到具體的某個資源。

那麼我理解的二者的區別就是:

URI可以表示一個域,也可以表示一個資源。

URL只能表示一個資源。

同樣的,URN(統一資源名稱)也是URI的一個子集,目前沒有大規模運用。



作者:張曉傑
鏈接:http://www.zhihu.com/question/21950864/answer/28847598
來源:知乎
URI 在於I(Identifier)是統一資源標示符,可以唯一標識一個資源。
URL在於Locater,一般來說(URL)統一資源定位符,可以提供找到該資源的路徑,比如zhihu.com/question/2195,但URL又是URI,因爲它可以標識一個資源,所以URL又是URI的子集。
舉個是個URI但不是URL的例子:urn:isbn:0-486-27557-4,這個是一本書的isbn,可以唯一標識這本書,更確切說這個是URN。
總的來說,locators are also identifiers, so every URL is also a URI, but there are URIs which are not URLs.




本部分參考自:[譯]URL和URI的區別

                                                  urivsurl

 

一直存在很多技術上的爭論,其中最爲妙的恐怕就是web地址應該叫什麼的問題。通常情況就是這樣:有人把地址欄的內容叫“URL”,這時候有些人就來勁了:“不!其實那時URI。。。”

對於這種糾正的反應呢,通常也有這麼幾種情況,心眼小的就尋思這人趕緊走吧,淡定點的就聳聳肩表示同意,火氣大的就拔刀相向了好不?

那這篇文章呢,就對這個只是提供一個簡單的總結,畢竟互黑也要黑到點子上是吧。

 

URI,URL,URN

從上面的那幅圖可以看出來,一共有三個不同的概念URI,URL,URN。這討論這樣的問題時,最好的方法就是回到原點啊,這裏我們在RFC 3986: Uniform Resource Identifier (URI): Generic Syntax裏面收集了點資料:

“A Uniform Resource Identifier (URI) 是一個緊湊的字符串用來標示抽象或物理資源。”

“A URI 可以進一步被分爲定位符、名字或兩者都是. 術語“Uniform Resource Locator” (URL) 是URI的子集, 除了確定一個資源,還提供一種定位該資源的主要訪問機制(如其網絡“位置”)。“

那我們無所不知的維基百科把這段消化的很好,並描述的更加形象了:

“URI可以分爲URL,URI或同時具備locators 和names特性的一個東西。URN作用就好像一個人的名字,URL就像一個人的地址。換句話說:URN確定了東西的身份,URL提供了找到它的方式。”

通過這些描述我們可以得到一些結論:

 

  • 首先,URL是URI的一種(通過那個圖就看的出來吧)。所以有人跟你說URL不是URI,他就錯了唄。但也不是所有的URI都是URL哦,就好像蝴蝶都會飛,但會飛的可不都是蝴蝶啊,你讓蒼蠅怎麼想!
  • 讓URI能成爲URL的當然就是那個“訪問機制”,“網絡位置”。e.g. http:// or ftp://.。
  • URN是唯一標識的一部分,就是一個特殊的名字。
  1. 下面就來看看例子吧,當來也是來自權威的RFC:
  • ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)
  • http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)
  • ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol)
  • news:comp.infosystems.www.servers.unix (also a URL because of the protocol)
  • tel:+1-816-555-1212
  • telnet://192.0.2.16:80/ (also a URL because of the protocol)
  • urn:oasis:names:specification:docbook:dtd:xml:4.1.2

總結

這些全都是URI, 其中有些事URL. 哪些? 就是那些提供了訪問機制的.

下面到了回答問題的時候了:

當我們替代web地址的時候,URI和URL那個更準確?

基於我讀的很多的文章,包括RFC,我想說URI更準確。

別急,我有我的理由:

我們經常使用的URI不是嚴格技術意義上的URL。例如:你需要的文件在files.hp.com. 這是URI,但不是URL--系統可能會對很多協議和端口都做出正

確的反應。

你去http://files.hp.com 和ftp://files.hp.com.可能得到完全不同的內容。這種情況可能更加普遍,想想不同谷歌域名上的不同服務啊。

所以,用URI吧,這樣你通常技術上是正確的,URL可不一定。最後“URL”這個術語正在被棄用。所以明智吧少年!

 





參考文獻:

http://baike.baidu.com/link?url=SU5tzPY_OwkVs64rWR65W-Upm7k-RmB9Jh6wj82gpxlfd9nYUHpLF6zzRZxR4QdwUuFYsBuiTDetgVQBodQDaa1L05VMQE_9OzTqSN8cfsm

http://baike.baidu.com/link?url=nCoyPq2tdGTNKT7ESp4Yfs5wvOSEZlUWu1X9uV3v1yfn_4AmOI6s1y-wxRvKRxoyjnQIL1zs3yeCcGPXAIICQq

http://www.zhihu.com/question/21950864











發佈了19 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章