應用層與 HTTP

統一資源定位符(URL)

/ you-are-EL /

URL 就是你打進瀏覽器的那串位址,例如 https://example.com:443/photos/cat.jpg?size=large。它是網頁世界裡相當於完整郵寄地址的東西:它告訴瀏覽器要如何抵達某個特定資源、以及是哪一個。就像「春田市橡樹街 42 號 3 室」能從數百萬扇門中鎖定一扇,一個 URL 也能從網路上的一切之中鎖定某個特定事物。

URL 由若干具名部分依固定順序組成。協定名(scheme,https)說明要用哪個協定。主機(host,example.com)指明那台機器——瀏覽器會透過 DNS 把它轉成一個 IP 位址。可有可無的連接埠(:443)說明那台機器上的哪扇門;若省略,就用該協定的預設值(http 是 80,https 是 443)。路徑(path,/photos/cat.jpg)指明伺服器上的那項特定資源。問號之後可有可無的查詢字串(query string,?size=large)攜帶參數,寫成以 & 連接的 name=value 配對。井字號之後可有可無的片段(fragment,#section2)指向頁面內的某個位置,由瀏覽器處理,並不送給伺服器。

URL 的重點在於統一的識別方式:單一一致的格式就能命名一個頁面、一張影像、一段影片、一個 API 端點或一個可下載的檔案,不論它實際存在何處。這正是超連結能運作的原因——一個連結就只是一個 URL,因此任何文件都能指向任何地方的任何資源。要注意 URL 命名的是位置(去哪裡找某物);它是更廣的「URI(識別符)」概念底下的一種。正因為 URL 是位置,它會失效:如果資源被搬走,舊的 URL 可能會回傳 404。

拆解 https://shop.example.com/items/42?color=red#reviews——協定:https;主機:shop.example.com;連接埠:443(https 的預設值,沒寫出來);路徑:/items/42;查詢:color=red;片段:reviews。瀏覽器用「主機+連接埠」去連線,送出「GET /items/42?color=red」,然後自己捲動到「reviews」這個錨點。

scheme://host:port/path?query#fragment——只有主機、連接埠、路徑與查詢會抵達伺服器;片段留在瀏覽器內。

空白與許多符號不能照字面出現在 URL 裡,因此會被百分號編碼(percent-encode)——空白會變成 %20。一個含 %20 或 %2F 的 URL 並非損壞;它只是把那些原本會搞混剖析器的字元逸出(escape)而已。

又稱
Uniform Resource Locatorweb address網址統一資源定位符