總結:HTTP 知識地圖與速查表
恭喜你完成了這趟 HTTP 深度學習之旅!本篇將整理全系列核心知識,並提供速查表供日常使用。
一、 知識地圖
1.1 HTTP 全景圖
二、 速查表
2.1 HTTP 方法
| 方法 | 用途 | 冪等 | 有 Body |
|---|---|---|---|
| GET | 讀取資源 | ✅ | ❌ |
| POST | 創建資源 | ❌ | ✅ |
| PUT | 完整更新 | ✅ | ✅ |
| PATCH | 部分更新 | ❌ | ✅ |
| DELETE | 刪除資源 | ✅ | ❌ |
| HEAD | 只取標頭 | ✅ | ❌ |
| OPTIONS | 預檢請求 | ✅ | ❌ |
2.2 狀態碼速查
| 範圍 | 類型 | 常見碼 |
|---|---|---|
| 1xx | 資訊 | 101 Switching Protocols |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重導向 | 301 永久, 302 暫時, 304 未修改 |
| 4xx | 客戶端錯誤 | 400 請求錯誤, 401 未認證, 403 禁止, 404 找不到, 422 驗證失敗 |
| 5xx | 伺服器錯誤 | 500 內部錯誤, 502 閘道錯誤, 503 服務不可用 |
2.3 常用標頭
請求標頭
| 標頭 | 用途 | 範例 |
|---|---|---|
| Accept | 接受的內容類型 | application/json |
| Accept-Encoding | 接受的壓縮 | gzip, br |
| Authorization | 認證資訊 | Bearer token |
| Content-Type | 請求體類型 | application/json |
| Cookie | Cookie 資料 | session=abc |
| If-None-Match | ETag 驗證 | "abc123" |
| Origin | 請求來源 | https://app.com |
回應標頭
| 標頭 | 用途 | 範例 |
|---|---|---|
| Cache-Control | 快取控制 | max-age=3600 |
| Content-Encoding | 內容壓縮 | gzip |
| Content-Type | 回應類型 | application/json |
| ETag | 資源標籤 | "abc123" |
| Set-Cookie | 設置 Cookie | session=abc; HttpOnly |
| Access-Control-Allow-Origin | CORS 允許來源 | https://app.com |
2.4 Cache-Control 指令
| 指令 | 說明 |
|---|---|
| public | 允許所有快取 |
| private | 只允許瀏覽器 |
| no-cache | 每次驗證 |
| no-store | 禁止儲存 |
| max-age=N | 有效期(秒) |
| s-maxage=N | CDN 有效期 |
| immutable | 永不變更 |
2.5 Cookie 屬性
| 屬性 | 說明 | 推薦 |
|---|---|---|
| HttpOnly | 禁止 JS 存取 | ✅ 敏感 Cookie |
| Secure | 只在 HTTPS | ✅ 生產環境 |
| SameSite | 跨站限制 | Strict 或 Lax |
| Max-Age | 有效期 | 依需求 |
| Path | 路徑限制 | / |
2.6 CORS 標頭
| 標頭 | 說明 |
|---|---|
| Access-Control-Allow-Origin | 允許的來源 |
| Access-Control-Allow-Methods | 允許的方法 |
| Access-Control-Allow-Headers | 允許的標頭 |
| Access-Control-Allow-Credentials | 是否允許 Cookie |
| Access-Control-Max-Age | 預檢快取時間 |
三、 HTTP 版本對比
| 特性 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 多路復用 | ❌ | ✅ | ✅ |
| 標頭壓縮 | ❌ | HPACK | QPACK |
| 伺服器推送 | ❌ | ✅ | ✅ |
| 傳輸層 | TCP | TCP | QUIC/UDP |
| HOL 阻塞 | ✅ | TCP 層 | ❌ |
| 連線遷移 | ❌ | ❌ | ✅ |
四、 安全檢查清單
4.1 傳輸安全
markdown
□ 使用 HTTPS
□ 設置 HSTS
□ TLS 1.2+
□ 定期更新憑證4.2 認證安全
markdown
□ 密碼加密儲存(bcrypt/argon2)
□ JWT 使用強密鑰
□ 設置合理過期時間
□ 實作 Refresh Token
□ 登入失敗限制4.3 API 安全
markdown
□ CORS 白名單
□ 輸入驗證
□ 輸出編碼
□ SQL/NoSQL 注入防護
□ 限流
□ 安全標頭(Helmet)4.4 Cookie 安全
markdown
□ HttpOnly
□ Secure
□ SameSite
□ 避免敏感資料五、 效能優化清單
5.1 減少請求
markdown
□ 合併 CSS/JS
□ 使用 Sprite 圖
□ 使用 HTTP/2
□ 預載入關鍵資源5.2 減少大小
markdown
□ Gzip/Brotli 壓縮
□ 圖片壓縮和 WebP
□ Tree Shaking
□ 移除未使用 CSS5.3 快取策略
markdown
□ 靜態資源長期快取
□ 使用 hash 檔名
□ HTML 使用 no-cache
□ 使用 CDN六、 工具速查
| 工具 | 用途 |
|---|---|
| DevTools Network | 瀏覽器分析 |
| cURL | 命令列請求 |
| HTTPie | 人性化命令列 |
| Postman | API 測試 |
| Charles/Wireshark | 抓包分析 |
七、 學習路徑
7.1 初學者
- HTTP 基礎概念
- 方法與狀態碼
- 標頭基礎
- CORS 入門
- DevTools 使用
7.2 進階者
- HTTP/2、HTTP/3
- 快取策略
- 安全與認證
- API 設計
- 效能優化
7.3 專家級
- 協定底層(TCP、QUIC)
- 自建 CDN
- 效能監控
- 安全審計
- 貢獻開源
八、 常見問題
Q1: CORS 錯誤怎麼解?
markdown
1. 檢查伺服器是否設置 Access-Control-Allow-Origin
2. 使用 credentials 時不能用 \*
3. 確認 OPTIONS 預檢請求正常返回Q2: 快取不生效?
markdown
1. 檢查 Cache-Control 標頭
2. 確認 DevTools 沒有勾選 Disable cache
3. 檢查 Vary 標頭Q3: JWT 過期怎麼處理?
markdown
1. 使用 Refresh Token 刷新
2. 前端攔截 401 錯誤自動刷新
3. 設定合理的過期時間總結
這趟 HTTP 學習之旅,我們從零開始,走過了:
- 基礎:協定結構、方法、狀態碼、標頭
- 版本演進:HTTP/1.1 → HTTP/2 → HTTP/3
- 安全:CORS、Cookie、認證、攻擊防禦
- 效能:快取、壓縮、CDN
- 實踐:API 設計、測試、工具使用
> **學習永無止境**——HTTP 協定仍在不斷演進。保持好奇心,持續關注新技術!
延伸閱讀與資源
官方規範
學習資源
工具
- httpstat.us - 測試狀態碼
- httpbin.org - 測試請求
- JWT.io - JWT 工具
🎉 恭喜完成 HTTP 系列! 🎉