HTTP 與 HTTPS

核心概念

HTTP 是 Web 通訊的事實標準。無狀態(每個請求獨立)、請求-回應模型。

請求結構:
GET /api/users/1 HTTP/1.1        ← method + path + version
Host: example.com                ← headers
Authorization: Bearer abc123

回應結構:
HTTP/1.1 200 OK                  ← version + status code
Content-Type: application/json   ← headers
Content-Length: 89

{ "id": 1, "name": "Terry" }     ← body

HTTP 方法

方法 語義 冪等 有 Body
GET 取得資料
POST 建立資源
PUT 完整更新
PATCH 部分更新
DELETE 刪除資源
冪等性與面試

POST 是唯一不冪等的常用方法。在設計重試機制時,非冪等操作(如支付)需要特別處理 → 見 01-Networking/07-Fault-Handling


狀態碼

分類 常見碼 含義
2xx 成功 200 OK 請求成功
201 Created 建立成功
3xx 重定向 301 Moved Permanently 永久移動
302 Found 暫時移動
4xx 客戶端錯誤 401 Unauthorized 需要驗證
403 Forbidden 已驗證但無權限
404 Not Found 資源不存在
429 Too Many Requests 頻率限制
5xx 伺服器錯誤 500 Server Error 伺服器內部錯誤
502 Bad Gateway 上游回應無效
401 vs 403 容易混淆

401 = 「你是誰?」(尚未驗證身份)
403 = 「我知道你是誰,但你沒有權限」


HTTPS 與安全

HTTPS = HTTP + TLS/SSL 加密層。

重要安全陷阱

HTTPS 加密的是傳輸通道,不代表請求內容是可信的

❌ 錯誤做法:從 request body 讀取 user_id 做資料庫查詢
✅ 正確做法:永遠從驗證過的 session/token 取得用戶身份

攻擊者可以修改 HTTPS 請求的 body(中間人攻擊會被阻止,但自行構造請求不會)。


Headers 的設計哲學

Headers 是靈活的鍵值對,Accept-Encoding 是好例子:

這種「客戶端宣告能力,伺服器做最佳決策」的模式值得在 API 設計中借鑒。