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。