URL與資源

這是看 Http權威指南 的筆記html

URL與資源

瀏覽因特網資源

URL(Uniform Resource Locator)統一資源定位符 是因特網上定位資源的主要方法,它的格式通常爲算法

方案://服務器位置/路徑, 如下是URL的一個例子安全

http:// www.baidu.com /index.html
URL方案(scheme) 服務器位置 資源路徑

URL的語法

下面咱們來詳細介紹一下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中包含有訪問資源的所需的所有信息

同時,相對論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能夠來自如下幾個不一樣的地方

  • 在資源中顯式提供

    有些資源會顯式指定基礎課URL, 如, html中能夠用標記<BASE>, 經過它來轉換那個HTML文檔中的全部相對URL

  • 封閉資源的基礎URL

    若是在一個沒有顯式指定基礎URL的資源中發現一個相對URL, 能夠將它所屬的資源的URL做爲基礎

  • 沒有基礎URL

    若是沒有基礎的URL, 這一般意味着你有一個絕對的URL,但有時可能只是一個不完整或損壞的URL

解析相對引用

要將一個相對URL轉換爲絕對URL,要將其先劃分爲一個個組件. 把URL劃分爲組件後,就能夠用如下的算法完成轉換了(圖處來自書本)

 將相對URL轉換爲絕對URL算法流程

 

咱們對上面的./hammers.html使用圖中描述的算法

  1. 路徑爲./hammers.html, 基礎URL爲http://www.joes-hardware.com/tools.html
  2. 方案(scheme)爲空,沿着圖左邊處理,繼承基礎URL方案
  3. 至少一個組件非空,一直處理到底端,繼承主機和端口組件
  4. 未來自相對URL(路徑:./harmers.html)的組件與繼承的組件合併,獲得新的絕對URL:http://ww.joes-hardware.com/hammers.html

使人頭疼的字符

URL字符集

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

相關文章
相關標籤/搜索