URL (Uniform Resource Locator,統一資源定位器) 是網際網路資源的標準地址格式,指定資源的位置與存取方式。它是 URI (Uniform Resource Identifier,統一資源識別符) 的子集,另一子集為 URN (Uniform Resource Name,統一資源名稱,如 urn:isbn:0451450523)。RFC 3986 定義通用語法,RFC 1738/3986 定義具體綱目。
https://user:pass@www.example.com:443/path/to/resource?key=value&foo=bar#section1
| 元件 | 名稱 | 說明 | 必要性 |
|---|---|---|---|
scheme | 綱目/協議 | 存取協定:http, https, ftp, mailto, tel, file, data, ws, wss, mailto, tel, sms, intent (Android), weixin (微信) 等 | 必要 |
userinfo | 使用者資訊 | username:password (已棄用、不安全、瀏覽器隱藏/警告),現用 Header/Token/OAuth | 可選 (不推薦) |
host | 主機/權威 | 域名 (例 www.example.com) 或 IP 位址 (IPv4 192.168.1.1, IPv6 [2001:db8::1]) | 必要 (除 file: 等) |
port | 連接埠 | 數字 1-65535。標準埠可省略:HTTP 80、HTTPS 443、FTP 21、SSH 22 | 可選 |
path | 路徑 | 資源在伺服器上的層級位置,區分大小寫 (視伺服器 OS/設定),以 / 分隔 | 可選 (預設 /) |
query | 查詢字串 | ? 開頭,key=value 鍵值對,& 分隔。用於傳遞參數、搜尋、追蹤、狀態 | 可選 |
fragment | 片段識別符 | # 開頭,指向資源內部區塊 (HTML id、PDF 頁碼、影片時間碼)。純客戶端處理,不送往伺服器 | 可選 |
| Scheme | 全名 | 預設埠 | 用途 |
|---|---|---|---|
| http | HyperText Transfer Protocol | 80 | 網頁瀏覽 (明文) |
| https | HTTP Secure (TLS/SSL) | 443 | 加密網頁、API、現代 Web 基礎 |
| ftp | File Transfer Protocol | 21 (控制), 20 (資料) | 檔案傳輸 (逐漸被 SFTP/HTTPS 取代) |
| ftps | FTP over TLS | 990 (隱式), 21 (顯式) | 加密 FTP |
| sftp | SSH File Transfer Protocol | 22 | SSH 通道檔案傳輸 (非 FTP) |
| mailto | 電子郵件 | — | 開啟郵件用戶端撰寫新信 |
| tel | 電話 | — | 撥打電話 (行動裝置/VoIP) |
| file | 本地檔案 | — | file:///C:/path/file.txt (三斜線) |
| data | 資料內嵌 | — | data:image/png;base64,... 內嵌小圖片/字體 |
| ws/wss | WebSocket | 80/443 | 全雙工即時通訊 |
| ssh | Secure Shell | 22 | 遠端終端機/通道 (非標準 URL scheme,常用 ssh://user@host) |
URL 僅允許 ASCII 字母、數字、- _ . ~ (非保留字元) 及保留字元 : / ? # [ ] @ ! $ & ' ( ) * + , ; = (作為語法分隔)。其他字元 (中文、空格、符號、非 ASCII) 必須編碼:
% + 兩位十六進位大寫 (如空格 %20、中文「中」UTF-8 %E4%B8%AD)encodeURI() (不編碼保留字元) vs encodeURIComponent() (編碼所有保留字元,查詢值必須用此)urllib.parse.quote() / quote_plus()| 類型 | 範例 | 說明 |
|---|---|---|
| 網頁 | https://example.com/path/page.html?lang=zh-TW#section2 | 標準 HTTPS 網頁 |
| API 端點 | https://api.example.com/v1/users/123?fields=name,email | RESTful API、查詢參數過濾欄位 |
| 檔案下載 | https://cdn.example.com/files/report.pdf?download=1&token=abc | 帶簽名 token 的私有下載連結 |
| 深層連結 | myapp://product/123?source=ads | App 通用連結 / Universal Links / App Links |
| 郵件 | mailto:user@example.com?subject=Hello&body=Content | 預填主旨/內容/抄送/密件副本 |
| 電話 | tel:+886-2-12345678 | E.164 國際格式 |
| 地圖導航 | geo:25.0330,121.5654?q=Taipei+101 | 地理座標 + 查詢 |
| 加密貨幣 | bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?amount=0.01 | BIP 21 標準 |
| 資料內嵌 | data:text/html;charset=utf-8, | 小型資源內嵌 HTML/CSS/JS/圖片 |
:80 http, :443 https). ..、合併多重 /%2f → %2F)#fragment (若比較資源身分)例子.中國 → xn--fsq092g.xn--fiqs8s) 防止同形異義攻擊 (Homograph Attack)curl -v "URL", httpie, wgeturllib.parse/yarl/furl, JS URL API/url-join, Go net/url, Java java.net.URI/OkHttp HttpUrl總結: URL 是網際網路的導航坐標,理解其結構、編碼規則、安全陷阱,是 Web 開發、測試、安全、SEO、資料分析的基本功。善用標準庫處理 URL,勿手工拼接。