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語法能夠概括到下面的通用格式上:spa
<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。code