官术网_书友最值得收藏!

1.3 URI

URI是Uniform Resource Identifier的簡寫,是一個用于標(biāo)識某一互聯(lián)網(wǎng)資源名稱的字符串。URI允許用戶對互聯(lián)網(wǎng)中的資源通過特定的協(xié)議進(jìn)行交互操作,它包括語法和相關(guān)協(xié)議的定義。下面是幾個RFC 3986 http://tools.ietf.org/html/rfc3986上舉的例子,通過這些例子,你可以具體體會一下URI的格式:

ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

HTTP中的URI能夠表達(dá)為絕對形式或者相對于一些已知的URI的形式,這兩種形式是不同的,絕對URI始終由方案名接著冒號開始。關(guān)于URI語法和語義的定義信息,可以參考RFC 2396,在這里不做詳細(xì)介紹。

HTTP協(xié)議沒有對URI的長度做出任何強(qiáng)制規(guī)定。服務(wù)器必須能夠處理它們服務(wù)的任何資源的URI,且應(yīng)該能夠處理長度極大的URI。如果URI超過服務(wù)器處理的長度,服務(wù)器應(yīng)該返回414(Request-URI too long)狀態(tài)。

1.3.1 URL

統(tǒng)一資源定位符(URL,Uniform / Universal Resource Locator的縮寫)也被稱為網(wǎng)頁地址,如同在網(wǎng)絡(luò)上的門牌,是因特網(wǎng)上標(biāo)準(zhǔn)的資源的地址(Address)。它最初是由蒂姆·伯納斯·李發(fā)明,用來作為萬維網(wǎng)的地址的?,F(xiàn)在它已經(jīng)被萬維網(wǎng)聯(lián)盟編制為因特網(wǎng)標(biāo)準(zhǔn)RFC 1738。URL用來通過HTTP協(xié)議定位網(wǎng)絡(luò)資源。URL的具體格式如下:

協(xié)議://主機(jī)名[:端口號]/路徑/[?查詢]

下面是一個典型的URL:

http://www.example.com/usermgr/userinfo.do?userid=1

http 是協(xié)議,www.example.com是主機(jī)名,端口是80,/usermgr/userinfo.do是路徑,userid=1是查詢。

應(yīng)該盡量避免在URL中使用IP地址(可以參考RFC 1900 http://www.ietf.org/rfc/rfc1900.txt)。在作為訪問資源的請求URI時,如果URL中不存在絕對路徑,則它必須作為"/"。如果代理收到的主機(jī)名不是完整的描述的域名,則它可以增加它的域名到收到的主機(jī)名中。如果代理收到的是完整資源域名,則代理禁止修改主機(jī)名。

1.3.2 URI/URL/URN

可能通過以上簡單的介紹,你會對URI/URL/URN的區(qū)別仍然不是很清楚。RFC 3986中關(guān)于三者的一段介紹如下:

A URI can be further classified as a locator, a name, or both. Theterm "Uniform Resource Locator" (URL) refers to the subset of URIs that, in addition to identifying a resource, provide a means oflocating the resource by describing its primary access mechanism(e.g., its network "location"). The term "Uniform Resource Name"(URN) has been used historically to refer to both URIs under the "urn" scheme [RFC2141], which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name.

An individual scheme does not have to be classified as being just one of "name" or"locator". Instances of URIs from any given scheme may have the characteristics of names or locators or both, often depending on the persistence and care in the assignment of identifiers by the naming authority, rather than on any quality of the scheme. Future specifications and related documentation should use the general term "URI" rather than the more restrictive terms "URL" and "URN" [RFC3305].

通過這段介紹我們可以得知:URI可被視為定位符(URL)、名稱(URN)或兩者兼?zhèn)?。統(tǒng)一資源名(URN)如同一個人的名稱,而統(tǒng)一資源定位符(URL)代表一個人的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。

維基百科也對URI和URL以及URN做出了解釋:URI是標(biāo)識一個互聯(lián)網(wǎng)資源,并指定對其進(jìn)行操作或取得該資源的方法的URL,可能通過對主要訪問手段的描述,也可能通過網(wǎng)絡(luò)“位置”進(jìn)行標(biāo)識。例如,http://www.wikipedia.org/這個URL,標(biāo)識一個特定資源(首頁)并表示該資源的某種形式(例如,以編碼字符表示的,首頁的HTML代碼)是可以通過HTTP協(xié)議從www.wikipedia.org這個網(wǎng)絡(luò)主機(jī)獲得的。URN是基于某命名空間通過名稱指定資源的URI。人們可以通過URN來指出某個資源,而無須指出其位置和獲得方式。資源無須是基于互聯(lián)網(wǎng)的。例如,URN urn:isbn:0-395-36341-1 指定標(biāo)識系統(tǒng)(即國際標(biāo)準(zhǔn)書號ISBN)和某資源在該系統(tǒng)中的唯一表示的URI。它可以允許人們在不指出其位置和獲得方式的情況下談?wù)撨@本書。

可見,URL和URN都是URI的子集。不過,在平時的工作和生活中用的最多的是URL,也就是把URI和URL看做是一個事物。如果你還有興趣進(jìn)一步仔細(xì)區(qū)分三者的話,可以參考RFC 3305 http://www.ietf.org/rfc/rfc3305.tx,這個標(biāo)準(zhǔn)里描述了三者的具體關(guān)系。

1.3.3 URI比較

當(dāng)通過比較兩個URI來判斷它們是否匹配時,客戶端應(yīng)該對整個URI使用大小寫敏感的字節(jié)對字節(jié)進(jìn)行比較,除了以下例外:

· 空或者沒有給出的端口號與該URI使用的默認(rèn)端口號相同。

· 比較主機(jī)名必須是大小寫不敏感的。

· 比較方案名必須是大小寫不敏感的。

· 空絕對路徑與絕對路徑“/”相同。

不在“保留”和“不安全”字符集中的字符與其URL編碼相同。例如,下面三個URI是相同的:

http://example.com:80/~smith/home.html

http://example.com/%7Esmith/home.html

http://example.com:80/%7esmith/home.html

主站蜘蛛池模板: 建始县| 沛县| 微山县| 乡宁县| 静安区| 高邑县| 盐津县| 凤台县| 崇明县| 宁河县| 湟源县| 米林县| 雷州市| 景洪市| 孟津县| 灵丘县| 惠来县| 浦城县| 河北区| 迁安市| 遂昌县| 阳江市| 安龙县| 呼和浩特市| 长治县| 海盐县| 宜昌市| 祁东县| 苏尼特右旗| 明溪县| 奉新县| 锡林浩特市| 保靖县| 资中县| 马山县| 日照市| 永和县| 库车县| 类乌齐县| 新宾| 建阳市|