我們每天可能要開啟幾十個頁面,但你是否觀察過它們的 URL 地址?接下來帶大家“庖丁解牛”,把 URL 拆開看看。
一個標準的 URL 地址由 protocol、hostname、port、path、parameters、query 幾部分組成。
接下來以下面這個連結為例進行詳細介紹:
http://news.qq.com/a/20160209/012154,htm?a=1&b=2&c=3
1) protocol
指 http:// 部分,是協定的意思。協定就是一套規則,定義了資料的封裝、打包、拆包和解釋的規則,http:// 即表示只能通過 HTTP 這套規則存取這個頁面資源。
大家是否還見過 https、ftp、thunder 這些協定頭? URL 地址標識了一個資源,協定頭表示我們可以通過不同的規則(協定)存取它。當然,前提是存放這些資源的伺服器支援這個協定。
在劇院,座位可以看作資源,觀眾只有獲取資源,才能看到劇目。過年時觀眾比較多,為了防止發生踩踏事件,劇院不但開放正門,還開放兩個側門。可以想象,觀眾的票面上,一定標識了座位的資訊(幾排幾號),這相當於 URL 的後半部分。
有的票面標了從正門進,有的標了從側門進,這就相當於 URL 的協定頭標識了協定,一種是按走正門的規則進入,另一種是按走側門的規則進入,觀眾拿著走正門的票從側門進入,會被拒絕而無法獲取資源(座位),所以採用何種協定至關重要。
前面討論的前提都是要側門開放,即伺服器支援這種協定。如果不開放側門,地址就是無效的,存取不到這個資源。
總之,協定頭標識了存取具體資源的規則,以後大家看到不同的協定頭,就想想 這個例子。當然,也可以設計一個協定,例如 abc://,這叫作自定義協定。
2) hostname
hostname 稱為主機名,在本例的 URL 中,news.qq.com 就是 Hostname。
可以將主機理解為一台名叫 news.qq.com 的機器,這台主機在 qq.com 域名下。qq.com 叫作 一級域名,很多人認為 www.qq.com 是一級域名,其實它只不過是一個二級域名,www 等同於剛才介紹的 news。
www.qq.com、news.qq.com、qzone.qq.com、v.qq.com 等都是二級域名。
3) port
port 稱為埠號,一般 HTTP 的埠號為 80,HTTPS 的為 443,可以理解為計算機有很多個提供服務的點,比如可以用預設的 80 埠來提供服務,也可以用 81 埠來提供服務。
把一個主機比喻成一間房子的話,這間房子可以有 65536 個門,門號就是埠號,這麼多埠都可以達到進出的目的。上面的 URL 中沒有任何的埠 號,即預設為 80。
以 http://news.qq.com:8080/a/20160209/012154.htm?a=1&b=2&c=3#p=1 為例,這 個 URL 指定了從 8080 這個埠號(即從這個門)存取資源,這個網頁伺服器必須先 在這個埠部署服務,才能供使用者存取(先把門開啟,才能提供服務)。
4) path
接下來是 /a/20160209/012154.htm/。hostname 後面的一長串全部稱為 path,是“路 徑”的意思,即最終檔案所在的路徑和檔名,只不過此地址的檔案儲存在騰訊的服 務器上,即 news.qq.com 這個域名下的若干台機器上。
5) parameters
?a=1&b=2&c=3 這一部分稱為引數(parameters ),也叫查詢。
它的目的是在 URL 中帶上一些原生的資訊傳給伺服器,a、b、c 三個字元是為了方便大家理解杜撰的 (在 baidu 的 URL 中的引數是這樣的:?ie=utf8&f=8&rsv_bp=1&tn=baidu ),這些 KeyValue 的鍵值對標識了一些特定的意義,最終要由伺服器進行判斷處理。
其中引數部分加上一些隨便填寫的值並不會出錯,比如 &d=4,只不過伺服器不解析這部分 罷了。
再長的 URL 也是由這幾個關鍵部分組成的,只要大家能分割出上面介紹的幾個主要部件,就能看岀各部分的意義。