NodeJs之初體驗04—UR(X)

weixin_34050427發表於2019-01-23

URL和URI

剛接觸web的時候大家一定經常遇到兩個名詞URL和URI,對各種解析轉換一定搞得莫名其妙暈頭轉向。那麼L和I到底是什麼,又有什麼區別呢?
URL (uniform resource locator) 統一資源定位符
對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的地址。網際網路上的每個檔案都有一個唯一的URL,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它。
URI (uniform resource identifier) 統一資源識別符號
是一個用於標識某一網際網路資源名稱的字串。 該種標識允許使用者對任何(包括本地和網際網路)的資源通過特定的協議進行互動操作。URI由包括確定語法和相關協議的方案所定義。
通過定義我們可以看出URL其實是URI的一個子集,(因為URL只面對網際網路資源而URI面對的是網際網路和本地)
我們的目的不是知道兩者叫什麼,我們要知道他們都是誰!

URL的組成

基本URL包含協議、伺服器名稱(或IP地址)、路徑和檔名,如“協議://授權/路徑?查詢”。完整的、帶有授權部分的普通統一資源標誌符語法看上去如下:

協議://使用者名稱:密碼@子域名.域名.頂級域名:埠號/目錄/檔名.檔案字尾?引數=值#標誌。

可能有些懵,是的可讀性很差,下面我們舉個栗子:
我們知道百度的網址是www.baidu.com
所謂www,就是全球資訊網伺服器,
baidu.com,就是百度公司的域名啦,域名就是伺服器IP的對映啦
可以說網站的網址就是由伺服器+域名的組合
我們ping一下baidu.com就能得到百度的一個ip為220.181.57.216

8915032-9266dc92286f8c7d.png
ping一下

我們直接在位址列敲IP會自動跳轉到百度首頁,我們知道連結是需要埠號的也就是上面說的域名後的:埠號,http協議預設的埠為80,是可以省略的,但如果不是預設的還是要加上的。我們直接220.181.57.216:80一樣跳到了首頁。我們看到首頁其實就在伺服器的根目錄
8915032-016ed7f2962df05f.png
220.181.57.216:80一樣到達了首頁

https就是通訊協議啦
上面就是我們獲取首頁的完整路徑,協議://伺服器.域名
8915032-5b8f85810bff47cb.png

當我們隨便搜尋個東西的時候會發現/s這個代表目錄路徑,wd是引數名,後面就是我們們搜尋的傳參啦
展現出來的就是搜尋出來的頁面,而這就是這個頁面在網際網路上唯一的地址就是通過https://www.baidu.com/s?wd=搜個撒 這個URL來進行定位的
當然也可以轉換成220.181.57.216:80/s?wd=搜個啥但是百度的伺服器ip肯定不只這一個,甚至這可能只是一個負載均衡的ip,但是www.baidu.com 確是唯一的,這也是域名的好處啦,方便好記又好用而且具有唯一性

所以我們抽絲剝繭可以得出結論

URL是可以分為三部分組成的:
-第一部分是協議(或稱為服務方式);
-第二部分是存有該資源的主機IP地址(有時也包括埠號);
-第三部分是主機資源的具體地址。如目錄和檔名等。
第一部分和第二部分之間用“://”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略

URI的組成

不同於URL直接指名道姓(路徑)的口誅筆伐(如何訪問-協議)式的簡單粗暴URI顯得更加的高深莫測他有時和URL一樣簡單直接(畢竟URL就是URI的一種形態),有時又拐彎抹角欲說還羞的讓人摸不著頭腦
如:本地檔案中的相對URI

為了說明相對URI,假設我們有一個基本的URI:
協議://域名/目錄a/目錄b/檔案c
下面的連結中使用了相對URI:
../檔案D
它擴充套件成完全的URI就是 "協議://域名/目錄a/檔案D",
下面是一個影象的相對URI:
<IMG src="../icons/logo.gif" alt="logo">
它擴充套件成完全的URI就是 "協議://域名/目錄a/icons/logo.gif"。

URL和URI的區別

下面就來看看例子吧,當來也是來自權威的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)
mailto:John.Doe@example.com (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. 哪些? 就是那些提供了訪問機制(協議)的.

當然繼續深入瞭解的話你會發現除了URL和URI其實還有一個叫URN的...


8915032-0ec39541e6e6d502.png
容我說一句:臥槽!!

死磕到底:
URN:Uniform Resource Name,統一資源名稱。同樣是作為URI的一個子集出現,是URL的一種更新形式,不依賴於位置,並且有可能減少失效連線的個數。但是其流行還需假以時日,因為它需要更精密軟體的支援。
可以這麼理解:URL代表資源的地址資訊,URN則代表某個資源獨一無二的名稱。
簡單總結一下 一個URI可以看做是一個人的名片,URN代表這個人的姓名和在公司的職位,而URL則表示這個人的地址。
拐到溝裡自行車創新研發公司
姓名:張三
職位:銷售經理
地址:XX市XXX路XX號 XXX大廈XX室
我自我理解上他們的功能呢就是說:

我通過地址可以到他的公司的辦公室找到張三這個人,我去和他談一筆業務(通過URL),
但是他可能不在辦公室(即失效連結)但是我只要知道他是”拐到溝裡自行車創新研發公司的銷售經理張三”(URN),
那我就能通過其他的方式人肉到他

當然這些都是我自己在網上看資料的一些心得,可能理解有些偏差或錯誤,如果有大神發現,希望可以不吝指正~~

相關文章