原文連接 blog
URI
URI, 既是統(tǒng)一資源標(biāo)識(shí)符號(hào),每個(gè) Web 服務(wù)器都有一個(gè) URI 標(biāo)識(shí)符,它在世界范圍內(nèi)唯一標(biāo)識(shí)并定位信息資源。
它具有兩種形式,URN (統(tǒng)一資源名)、URL(統(tǒng)一資源定位符)。
URN
URN (統(tǒng)一資源名),是作為特定內(nèi)容的唯一名稱使用的,與目前資源所在地?zé)o關(guān)。使用這些與位置無關(guān)的 URN,就可以將資源四處搬移。通過 URN,還可以用同一個(gè)名字通過多種網(wǎng)絡(luò)訪問協(xié)議來訪問資源。
URL
URL(統(tǒng)一資源定位符),是 URI 最常見的形式,它描述了一臺(tái)特定服務(wù)器上某資源的特定位置。它們可以明確說明如何從一個(gè)精確、固定的位置獲取資源。
一個(gè)完整的 URL 通常包括以下三部分:
方案:方案部分,說明了 Web客戶端 訪問資源時(shí)所使用的協(xié)議類型。通常是HTTP協(xié)議。方案可以使用其他協(xié)議來訪問資源,它們可以指向因特網(wǎng)上的任意資源,比如:E-mail:
jkchaom@gmail.com,或者其他協(xié)議。服務(wù)器位置:這部分告知服務(wù)器端的位置位于何處。通常的組成是“主機(jī)名 + 端口”的形式告知,也有“ IP 地址 + 端口”的形式。端口標(biāo)識(shí)出服務(wù)器正在監(jiān)聽的網(wǎng)絡(luò)端口,對(duì)下層使用了 TCP 協(xié)議的 HTTP 來說,默認(rèn)端口號(hào)為80;
資源路徑:路徑說明了請(qǐng)求的是服務(wù)器上哪個(gè)特定的本地資源。
整合到結(jié)構(gòu),既是“方案 :// 服務(wù)器位置/路徑”
此外,一些非必需的 URL 組件也在其中扮演著非常重要的作用:
查詢:主要用來縮小所請(qǐng)求資源類型范圍。通常以一個(gè)“ ?”,開始,比如以下URL 地址,https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=weibo 。按照常規(guī),查詢組件的組成是以一系列的“名/值”,對(duì)的形式出現(xiàn),名值對(duì)之間用字符“&”分隔。
片段:有些資源類型,可以做進(jìn)一步劃分,比如 HTML ,URL 支持使用片段組件來表示一個(gè)資源內(nèi)部的片段。通常以“#” 開始,比如:https://github.com/jkchao/blog#http , HTTP 服務(wù)器通常只處理整個(gè)對(duì)象,而不是對(duì)象的片段,客戶端不能將片段傳送給服務(wù)器,瀏覽器從服務(wù)器獲得了整個(gè)資源之后,會(huì)根據(jù)片段來顯示片段資源。 因此,片段組件,僅由客戶端使用。
URL 的缺點(diǎn)
URL 表示的是實(shí)際的地址,而不是準(zhǔn)確的名字。這就意味著 URL 會(huì)告訴你資源此時(shí)處于什么位置,它會(huì)為你提供特定端口上特定服務(wù)器的名字,告訴你在何處可以找到這個(gè)資源。這種方案的最大弊端在于,如果資源被移走了,URL 也就不再有效了。那時(shí),它就無法對(duì)對(duì)象進(jìn)行定位了。
永久統(tǒng)一資源定位符(PURL),是用 URL 實(shí)現(xiàn) URN 功能的一個(gè)例子。其基本思路是在搜索資源的過程中引入另一個(gè)中間層,通過一個(gè)中間資源定位符服務(wù)器對(duì)資源的實(shí)際 URL 進(jìn)行登記和跟蹤,客戶端可以向定位符請(qǐng)求一個(gè)永久 URL ,定位符可以以一個(gè)資源作為響應(yīng),將客戶端重定向到資源當(dāng)前實(shí)際 URL 上去。如下圖所示: