HTTP 狀態碼速查

這裡彙整介面與 CDN 最常見的狀態碼,極少用的實驗碼未收錄。

更新日期:

碼名稱含義
200OK成功(含內容)
201已建立資源已建立
204無內容成功(空內容)
301已永久移動永久重新導向
302已找到暫時重新導向
304未修改使用快取副本
400錯誤的請求客戶端請求無效
401未授權需要驗證或驗證失敗
403禁止存取已驗證但被拒絕
404找不到資源資源不存在
405不允許的方法HTTP 方法錯誤
408請求逾時客戶端速度太慢
409衝突狀態衝突
410已移除已永久移除
422無法處理的內容語義無效
429請求過多已被限流
500伺服器內部錯誤伺服器故障
502閘道錯誤上游回應無效
503服務無法使用過載或停機
504閘道逾時上游逾時

說明

狀態碼的五個分類

第一個數字告訴你是誰負責,以及大約發生了什麼事。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 標頭。

參考來源