HTTP 狀態碼速查
這裡彙整介面與 CDN 最常見的狀態碼,極少用的實驗碼未收錄。
| 碼 | 名稱 | 含義 |
|---|---|---|
| 200 | OK | 成功(含內容) |
| 201 | 已建立 | 資源已建立 |
| 204 | 無內容 | 成功(空內容) |
| 301 | 已永久移動 | 永久重新導向 |
| 302 | 已找到 | 暫時重新導向 |
| 304 | 未修改 | 使用快取副本 |
| 400 | 錯誤的請求 | 客戶端請求無效 |
| 401 | 未授權 | 需要驗證或驗證失敗 |
| 403 | 禁止存取 | 已驗證但被拒絕 |
| 404 | 找不到資源 | 資源不存在 |
| 405 | 不允許的方法 | HTTP 方法錯誤 |
| 408 | 請求逾時 | 客戶端速度太慢 |
| 409 | 衝突 | 狀態衝突 |
| 410 | 已移除 | 已永久移除 |
| 422 | 無法處理的內容 | 語義無效 |
| 429 | 請求過多 | 已被限流 |
| 500 | 伺服器內部錯誤 | 伺服器故障 |
| 502 | 閘道錯誤 | 上游回應無效 |
| 503 | 服務無法使用 | 過載或停機 |
| 504 | 閘道逾時 | 上游逾時 |
說明
- 401 與 403:未通過認證,或已登入但沒有權限。
- 來源站連不上時,CDN 也可能直接回傳 5xx。
狀態碼的五個分類
第一個數字告訴你是誰負責,以及大約發生了什麼事。1xx 是資訊性,客戶端很少看到。2xx 表示成功——200 含主體的 OK,204 不含主體的 No Content,206 用於部分下載。3xx 表示資源在別處。4xx 表示請求本身有錯:語法錯誤、缺少憑證或達到速率限制。5xx 表示伺服器失敗,即使請求本身沒問題。光是看第一個數字就能知道該修正客戶端還是向上遊伺服器回報。
選擇適當的重新導向
301 和 308 都表示永久;302 和 307 都表示臨時。差異在於處理方法的方式:301 和 302 歷史上讓客戶端可以將 POST 轉為 GET,而 307 和 308 則保留原始方法和主體,這對 API 和表單提交很重要。若 URL 真正永久移動,使用 301;若是臨時路由(如維護頁面或 A/B 測試),使用 302 或 307。小心鏈結——每個額外的跳轉都會增加延遲和損失權重,所以直接重新導向到最終目標。
釐清 4xx 錯誤
401 表示認證缺少或失敗,因此傳送有效憑證即可解決;403 表示請求已遭理解並通過認證但不被允許,用同樣的憑證重試不會有幫助。404 表示資源不存在;410 表示它曾存在且被故意移除。429 表示達到速率限制,應該退避並遵守任何 Retry-After 標頭。400 通常表示輸入格式錯誤,405 表示方法對該 URL 不正確,422 表示語法正確但內容驗證失敗。
解讀 5xx 代碼
500 是通用內部錯誤;502 Bad Gateway 表示上遊伺服器回傳了無法使用的內容;503 表示服務暫時不可用或過載;504 表示上遊逾時。這些是伺服器的問題,不是呼叫者的問題,所以修正是用退避重試、檢查上遊健康狀態或卸除負載。CDN 可以代替它無法聯絡的上遊伺服器發出 502、503 或 504,這就是為什麼同樣的錯誤可能來自兩個非常不同的地方——檢查伺服器與 cache-status 標頭來確定是哪一個。
狀態碼的實務應用:API 與快取
兩個日常用途值得關注。首先是快取:帶有 Cache-Control 標頭的 200 可以被儲存,304 Not Modified 告訴客戶端重用它的副本,而 5xx 不應被快取。其次是 API:建立資源的 POST 應回傳帶有 Location 標頭的 201,DELETE 通常回傳 204,而沒有改變的 PATCH 可能回傳 200 或 204。行為良好的客戶端首先根據分類分支(2xx、4xx、5xx),然後才根據確切的代碼,這能讓重試和退避邏輯簡潔且可預測。
常見問題
- HTTP 403 是什麼意思?
- 403 表示伺服器已理解(通常已驗證)請求,但拒絕授權存取該資源。與 401 不同,重新登入也無法解決。
- HTTP 301 和 302 轉址有什麼區別?
- 301 表示資源永久遷移,用戶端和搜尋引擎此後應使用新網址;302 是暫時轉址,原網址仍然有效。
- HTTP 429 是什麼意思?怎麼解決?
- 429 表示請求過於頻繁,觸發了流量限制。應降低請求頻率,並遵循伺服器回傳的 Retry-After 標頭。