萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

URL (統一資源定位器) 完整解析:結構、編碼、類型與最佳實踐

定義

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全名預設埠用途
httpHyperText Transfer Protocol80網頁瀏覽 (明文)
httpsHTTP Secure (TLS/SSL)443加密網頁、API、現代 Web 基礎
ftpFile Transfer Protocol21 (控制), 20 (資料)檔案傳輸 (逐漸被 SFTP/HTTPS 取代)
ftpsFTP over TLS990 (隱式), 21 (顯式)加密 FTP
sftpSSH File Transfer Protocol22SSH 通道檔案傳輸 (非 FTP)
mailto電子郵件—開啟郵件用戶端撰寫新信
tel電話—撥打電話 (行動裝置/VoIP)
file本地檔案—file:///C:/path/file.txt (三斜線)
data資料內嵌—data:image/png;base64,... 內嵌小圖片/字體
ws/wssWebSocket80/443全雙工即時通訊
sshSecure Shell22遠端終端機/通道 (非標準 URL scheme,常用 ssh://user@host)

百分號編碼 (Percent-Encoding / URL Encoding)

URL 僅允許 ASCII 字母、數字、- _ . ~ (非保留字元) 及保留字元 : / ? # [ ] @ ! $ & ' ( ) * + , ; = (作為語法分隔)。其他字元 (中文、空格、符號、非 ASCII) 必須編碼:

  • 格式:% + 兩位十六進位大寫 (如空格 %20、中文「中」UTF-8 %E4%B8%AD)
  • 路徑、查詢、片段各有不同保留字元集,編碼時需依上下文
  • JavaScript: encodeURI() (不編碼保留字元) vs encodeURIComponent() (編碼所有保留字元,查詢值必須用此)
  • Python: urllib.parse.quote() / quote_plus()

URL 類型與範例

類型範例說明
網頁https://example.com/path/page.html?lang=zh-TW#section2標準 HTTPS 網頁
API 端點https://api.example.com/v1/users/123?fields=name,emailRESTful API、查詢參數過濾欄位
檔案下載https://cdn.example.com/files/report.pdf?download=1&token=abc帶簽名 token 的私有下載連結
深層連結myapp://product/123?source=adsApp 通用連結 / Universal Links / App Links
郵件mailto:user@example.com?subject=Hello&body=Content預填主旨/內容/抄送/密件副本
電話tel:+886-2-12345678E.164 國際格式
地圖導航geo:25.0330,121.5654?q=Taipei+101地理座標 + 查詢
加密貨幣bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?amount=0.01BIP 21 標準
資料內嵌data:text/html;charset=utf-8,

Hello

小型資源內嵌 HTML/CSS/JS/圖片

URL 正規化與比較 (避免重複抓取/快取錯誤)

  1. Scheme、Host 轉小寫
  2. 移除預設埠 (:80 http, :443 https)
  3. 路徑解析 . ..、合併多重 /
  4. 百分號編碼大寫化 (%2f → %2F)
  5. 移除片段 #fragment (若比較資源身分)
  6. 查詢參數排序 (可選,視應用語意)

安全與最佳實踐

  • ✅ 永遠使用 HTTPS (HSTS、預載清單、Certificate Transparency)
  • ✅ 敏感資訊放 Request Body / Header,不要放 Query String (URL 會被記錄在伺服器日誌、Proxy 日誌、瀏覽器歷史、Referer Header)
  • ✅ 驗證/清理使用者輸入的 URL (防 SSRF、XSS、Open Redirect)
  • ✅ 使用 URL 建構器 (URLSearchParams, UriBuilder, urllib.parse.urlencode) 而非字串拼接
  • ✅ 短網址服務需謹慎 (隱藏真實目的地、可能被劫持、追蹤點擊)
  • ✅ 國際化域名 (IDN) 需 Punycode 編碼 (例子.中國 → xn--fsq092g.xn--fiqs8s) 防止同形異義攻擊 (Homograph Attack)

實用工具

  • 線上編碼/解碼:urlencoder.org、meyerweb encoder
  • 瀏覽器開發者工具 Network 面板 → 右鍵請求 → Copy → Copy as cURL / fetch
  • 命令列:curl -v "URL", httpie, wget
  • 程式庫:Python urllib.parse/yarl/furl, JS URL API/url-join, Go net/url, Java java.net.URI/OkHttp HttpUrl

總結: URL 是網際網路的導航坐標,理解其結構、編碼規則、安全陷阱,是 Web 開發、測試、安全、SEO、資料分析的基本功。善用標準庫處理 URL,勿手工拼接。

copyright © 萬盛學電腦網 all rights reserved