原創(chuàng)文章轉(zhuǎn)載請(qǐng)注明出處,謝謝
URL語(yǔ)法
URL提供了一種特定定位因特網(wǎng)上任意資源的手段,但這些資源是可以通過各種不同的Scheme來(lái)訪問,因此URL語(yǔ)法會(huì)隨著方案的不同而有所不同。
URL的通用格式如下:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
以下就是這個(gè)9個(gè)通用URL組件的定義
Scheme(方案)
scheme組件必須以一個(gè)字母符號(hào)開始,由第一個(gè)":"將其與URL的其余部分分隔開。
scheme是不區(qū)分大小寫的。
常用的包括Http,FTP,SMTP,Https。
Host(主機(jī)) && Port(端口)
Host標(biāo)識(shí)了資源宿主服務(wù)器的主機(jī)名或分IP地址。
Port標(biāo)識(shí)了資源宿主服務(wù)器正在監(jiān)聽的端口號(hào)。
User(用戶名) && Password(密碼)
某些方案訪問資源時(shí)需要User,User后面可能要包含的Password,中間由冒號(hào)(:)分隔。
Path(路徑)
服務(wù)器上資源的本地名,由一個(gè)斜杠(/)將其與前面的URL組件分隔開來(lái)。路徑組件的語(yǔ)法是與服務(wù)器和方案有關(guān)的。
Params(參數(shù))
某些方案會(huì)用這個(gè)組件來(lái)指定輸入?yún)?shù)。參數(shù)為名/值對(duì)。URL中可以包含多個(gè)參數(shù)字段,它們相互之間以及與路徑的其余部分之間用分號(hào)(;)分隔。
Query(查詢)
某些方案會(huì)用這個(gè)組件傳遞參數(shù)以激活應(yīng)用程序(比如數(shù)據(jù)庫(kù)、公告板、搜索引擎以及其他因特網(wǎng)網(wǎng)關(guān))。查詢組件的內(nèi)容沒有通用格式。用字符“?”將其與URL的其余部分分隔開來(lái),名/值對(duì)的形式中間都是以&分隔開。
Frag(片段)
一小片或一部分資源的名字。引用對(duì)象時(shí),不會(huì)將frag字段傳送給服務(wù)器;這個(gè)字段是在客戶端內(nèi)部使用的。通過字符“#”將其與URL的其余部分分隔開來(lái)。用來(lái)指定資源中的章節(jié),直接跳轉(zhuǎn)。
URL快捷方式
URL有兩種方式:絕對(duì)的和相對(duì)的。相對(duì)URL是不完整的。要從相對(duì)URL中獲取訪問資源所需的全部信息,就必須相對(duì)于另一個(gè),被稱為其基礎(chǔ)(base)的URL進(jìn)行解析。對(duì)于相對(duì)URL是有相應(yīng)的算法進(jìn)行補(bǔ)全的。有些瀏覽器在用戶輸入U(xiǎn)RL之后會(huì)進(jìn)行“自動(dòng)擴(kuò)展”。關(guān)于“自動(dòng)擴(kuò)展”的特性包括主機(jī)名擴(kuò)展和歷史擴(kuò)展兩種。
基礎(chǔ)URL可以來(lái)自下面幾個(gè)地方:
- 相對(duì)路徑需要用基礎(chǔ)URL進(jìn)行補(bǔ)完,有些時(shí)候有些資源會(huì)顯示的指定基礎(chǔ)URL,如在HTML頁(yè)面中指定<BASE>,通過它來(lái)轉(zhuǎn)換這個(gè)頁(yè)面的相對(duì)路徑。
- 如果沒有顯示的制定基礎(chǔ)URL的話,那么會(huì)以當(dāng)前的頁(yè)面的位置作為基礎(chǔ)URL進(jìn)行相對(duì)路徑補(bǔ)完。
URL的字符
如上面所說(shuō)的,URL是可以再各種協(xié)議中使用的,也就是說(shuō)無(wú)論任何協(xié)議都可以準(zhǔn)確安全的傳送到目的地,者流就有個(gè)問題了:有些協(xié)議會(huì)剝?nèi)ヒ恍┨囟ǖ淖址鰧iT的用途,可以參考類似于我們?cè)诰幊讨薪?jīng)常遇到的關(guān)鍵字符什么的,而URL既要保證所有協(xié)議傳輸時(shí)都不能出問題,又要保證URL對(duì)人類來(lái)說(shuō)有可閱讀性,而且還有完整性,要求非常非常的多,這時(shí)轉(zhuǎn)義機(jī)制就華麗麗的誕生了~
URL使用的是US-ASCII,但是這個(gè)字符主要針對(duì)的是英文,隨著互聯(lián)網(wǎng)的發(fā)展,各種類別的語(yǔ)言都有了通過URL傳輸?shù)男枨螅乙灿卸M(jìn)制傳輸?shù)男枨蟮鹊龋瑸榱吮荛_安全字符集帶來(lái)的限制,人們?cè)O(shè)計(jì)了一種編碼機(jī)制,用來(lái)表示URL中各種不安全的字符,這種轉(zhuǎn)義方法包含了一個(gè)百分號(hào)(%),后面跟著兩個(gè)字符ASCII碼的十六進(jìn)制數(shù)。
在URL中有幾個(gè)字符被保留起來(lái)有著特殊含義。
URN的定義
URN的目的就是無(wú)論對(duì)象搬到什么地方(在一個(gè)Web服務(wù)器內(nèi)或者是不同的Web服務(wù)器),URN都可以為對(duì)象提供一個(gè)穩(wěn)定的名稱。基本的思想就是在搜索資源的過程中引入另一個(gè)中間層,通過一個(gè)中間資源定位符服務(wù)器對(duì)資源的實(shí)際URL進(jìn)行登記和跟蹤。客戶端可以向定位符請(qǐng)求一個(gè)永久的URL,定位符可以以一個(gè)資源作為響應(yīng),將客戶端重定向到資源當(dāng)前實(shí)際的URL上去。