這是看 Http權威指南 的筆記html
URL(Uniform Resource Locator)統一資源定位符 是因特網上定位資源的主要方法,它的格式通常爲算法
方案://服務器位置/路徑, 如下是URL的一個例子安全
http:// | www.baidu.com | /index.html |
---|---|---|
URL方案(scheme) | 服務器位置 | 資源路徑 |
下面咱們來詳細介紹一下URL的語法服務器
大多數的URL方案的避URL語法都創建在由9部分構成的通用格式化上編碼
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>spa
如下各類組件進行總結設計
組件 | 描述 | 默認值 |
---|---|---|
方案(scheme) | 訪問服務器以獲取資源時要使用的協議 | 無 |
用戶(user) | 一些方案訪問資源時須要的用戶名 | 匿名 |
密碼(password) | 用戶名後面可能要包含密碼,中間由冒號分隔 | <E-mail地址> |
主機(host) | 資源宿主服務器的主機名或點分IP地址 | 無 |
端口(port) | 資源宿主服務器正在監聽的端口號,不少方案都有默認端口號(HTTP默認端口號爲80) | 每一個方案特有 |
路徑 | 服務器上資源的本地名,由一個"/"將其與前面的URL組件分隔開來.路徑組件的語法與服務器和方案有關 | 無 |
參數 | 一些方案會用這個組件指定輸入參數. 參數爲名/值對. URL中能夠包含多個參數字段, 它們相互以及與路徑的其他部分之間用分號(;)分隔 |
無 |
查詢 | 一些方案會用這個組件傳遞參數以激活應用程序.查詢組件的內容沒有通用格式.化用符號"?"將其與URL的其他部分分隔開來 | 無 |
片斷 | 一小片或一部分資源的名字.引用對象時,不會將frag字段傳送給服務器這個字段是在客戶端內部使用的.經過字符"#"將其與URL其他部分分隔開來 | 無 |
接下來說分別講主要的組件代理
方案實際上規定了如何訪問指定資源的主要標識符,它會告訴程序如何解析URLcode
方案組件必需以一個字母符號開始,由第一個":"將其和URL的其它部分分隔, 方案是大小寫無關的orm
主機和端口用以識別互聯網上的主機,能夠經過主機名,也能夠經過IP地址指向服務器
用戶名和密碼用":"分隔符
路徑一般是像一個分級的文件系統路徑. 能夠用字符"/"將HTTP URL的路徑組件劃分紅一些路徑段(path segment),每一個路徑段都有本身的參數組件
URL有兩種方式:絕對的和相對的. 上文出現的都是絕對的URL. 絕對URL中包含有訪問資源的所需的所有信息
同時,相對論URL是不完整的,要從相對URL中獲取讓訪問資源所需的所有信息,就發源相對於另外一個,被稱爲其基礎(base)的URL進行解析
如下是書上的一個例子
<HTML> <HEAD><TITLE>Joe's Tools</TITLE></HEAD> <BODY> <H1>Tools Page</H1> <H2>Hammers</H2> <p>Joe's Hardware online has the largest selection of <A HREF="./hammers.html"> hammers </A> on earth </p> </BODY> </HTML>
其中,基礎URL爲:http://www.joes-hardware.com/tools.html
資源./hammers.html即相對的URL,它被解析爲:基礎URL+相對URL(後面有講具體的解析規則),
即http://www.joes-hardware.com/hammers.html
轉換處理的第一步就是找到基礎URL. 基礎URL是相對論URL的參考點. 基礎URL能夠來自如下幾個不一樣的地方
有些資源會顯式指定基礎課URL, 如, html中能夠用標記<BASE>, 經過它來轉換那個HTML文檔中的全部相對URL
若是在一個沒有顯式指定基礎URL的資源中發現一個相對URL, 能夠將它所屬的資源的URL做爲基礎
若是沒有基礎的URL, 這一般意味着你有一個絕對的URL,但有時可能只是一個不完整或損壞的URL
要將一個相對URL轉換爲絕對URL,要將其先劃分爲一個個組件. 把URL劃分爲組件後,就能夠用如下的算法完成轉換了(圖處來自書本)
咱們對上面的./hammers.html使用圖中描述的算法
http的字符集爲US-ASCII,其它字符用轉義序列表示
爲了避開安全字符集表示法帶來的限制,人們設計了這樣一種編碼機制來轉義一些不安全的字符
具體作法是:一個百分號(%)+兩個表示字符ASCII碼的十六進制
如下列出幾個例子
字符 | ASCII碼 | 示例URL |
---|---|---|
~ | 126(0x7E) | http://www.joes-hardware.com/%7Ejoe |
空格 | 32(0x20) | http://www.joes-hardware.com/more%20tools.html |
% | 37(0x25) | http://www.joes-hardware.com/100%25satisfaction.html |
在URL中有幾個字符被保留, 在URL中也對其進行編碼, 如下是保留及受限字符
字符 | 保留/受限 |
% | 保留做爲編碼字符的轉義標誌 |
/ | 保留做爲路徑組件中的分隔字符 |
. | 保留在路徑組件中使用 |
.. | 保留在路徑組件中使用 |
# | 保留做爲分段定界使用 |
? | 保留做爲查詢字符串定界使用 |
; | 保留做爲參數定界符使用 |
: | 保留做爲方案, 用戶/號令, 以及主機/端口組件的定界符使用 |
$,+ | 保留 |
@ & = | 在一些方案上下文特殊的含義,保留 |
{} | ^ ~ [] ' | 因爲各類傳輸Agent代理,各類網關的不安全處理,使用受限 |
< > " | 不安全 |
0x00-0x1f,0x7f | 受限,這些十六進制範圍內的字符都在ASCII字符集的不可打印區間內 |
>0x7f | 受限,十六進制值在此範圍內的字符都不在ASCII字符集的7比特範圍內 |
轉載請註明出處,請忽用於任何商業用途--nothi