1. 程式人生 > >HTTP協議之URL

HTTP協議之URL

路徑 空格 出現 用戶 歸納 錨點 params 可見 -a

1.什麽是URL

URL的全稱是Uniform Resoure Locator,統一資源定位器。URL是瀏覽器尋找信息時所需的資源位置。當一個人將瀏覽器指向一個URL,瀏覽器就會在幕後發送適當的協議報文來獲取人們所期望的資源。說到URL就不得不說下URI與URN這總是伴隨出現的概念。

URI的全稱是Uniform Resource Identifier,統一資源標識符。

URN的全稱是uniform resource name,統一資源命名。

顯然,URI是一個更加抽象的概念,定義了資源的唯一性標識,而URL與URN是他的兩種實現。前者根據具體位置定位資源,後者根據名稱定位資源。而HTTP協議處理的基本上都是URL。

URL的出現整合了互聯網資源的獲取方式,使得資源的獲取方式都變得明朗起來。

2.URL語法

URL語法可以歸納到下面的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
  • scheme:方案名,常見的是http/https/ftp/mail等協議。方案名是大小寫無關的,即http://www.baidu.com與HTTP://www.baidu.com是等價的。
  • user:用戶名,在http協議中比較少見,默認值是匿名用戶"anonymous"
  • password:密碼,與上面的user性質相同。在ftp協議中是比較常見的,比如ftp://user:password@ftphost/download。如果不指定密碼,不同的瀏覽器實現會發送不同的默認密碼。
  • host:主機,資源的具體承載機器。一般使用域名或者IP來表示,使用IP的可以直接定位到具體機器,而使用域名的需要經過DNS解析後獲得IP。
  • port:端口,機器上的具體應用。在一臺機器上一個端口對應一個應用,有了host+port就定位到資源的具體應用上了。http協議的默認端口是80,https的默認端口是443。
  • path:路徑,資源的分級目錄。類似於文件系統的路徑,可以使用多個/進行層級分割,每層都可以跟參數。
  • params:路徑對應的參數,不常用但合法。比如:http://www.baidu.com/china;type=a/beijing;degree=b
  • query:查詢字符串,與後端程序交互的關鍵,以?開始。比如:http://www.baidu.com?item=a&color=b
  • frag:片段,也叫錨點。前面部分可以定位到具體某個資源文件,片段用來標識具體哪一個部分。而片段是不會發送給服務器的,服務器返回整個對象,瀏覽器根據片段來展示不同效果。

3.URL字符集

  • URL是可移植的,所以為保障安全傳輸,要選用較小的、通用的字符集。
  • URL要有可讀性,所以不可見,不可打印的字符也不能使用在URL中。
  • URL要有完整性,能包含各種復雜的含義,所以通過轉義機制將不安全的字符編碼轉移為安全的字符編碼。

介於上述原因,URL的設計者采用了US-ASCII編碼,同時引入了轉移序列的概念。具體的轉譯方法就是,將不安全的字符使用一個百分號%,後面跟著兩個表示字符ASCII碼的十六位進制數。比如空格對應ASCII碼為32,所以轉義後為%20。

而對於中文字符,則進行這樣不同的處理。由於2個十六位進制數是一個字節的長度,所以就是將不安全字符對應的二進制按照字節劃分,每個字節前跟了一個%。比如“你好”的十六進制數是e4bda0e5a5bd,經UrlEncode後就是%e4%bd%a0%e5%a5%bd。

HTTP協議之URL