跳到主要內容
其他筆記

HTTP 狀態碼整理:開發時真正會用到的那幾個

整理 1xx 到 5xx 五大類狀態碼裡,前端與後端開發時真正常碰到的項目,包含 301/302/303/307 這幾個重新導向狀態碼的語意差異、304 快取的運作方式,以及常見的 4xx/5xx 錯誤代表什麼。

W

HTTP 狀態碼分成五大類,這篇整理開發時真正常用到的部分,不是每一個細碼都列——完整清單查維基百科更全。

1xx:參考資訊

代表伺服器先暫時回應一個狀態,正式回應前用戶端要準備接收一個或多個 1xx 回應。實務上很少直接接觸到,101(切換通訊協定)在 WebSocket 的握手過程會用到。

2xx:成功

狀態碼意思
200請求成功
201已建立(常見於 POST 建立新資源後)
204無內容(成功但沒有要回傳的內容,常見於 DELETE)

3xx:重新導向,容易搞混的幾個

301 vs 302:都是「這個網址的內容在別的地方」,差在永久還是暫時。301 會被瀏覽器與搜尋引擎快取記住,之後同樣的請求會直接跳過原網址;302 每次都要重新問一次原網址。網域搬家、網址結構永久改版用 301;短期活動頁、A/B 測試這類暫時性轉址用 302。

303:通知用戶端改用 GET 方法連到另一個網址查看結果,常見於「表單送出用 POST,處理完後轉址到結果頁」這種情境,避免使用者重新整理結果頁時又送出一次表單。

307:跟 302 一樣是暫時重新導向,但明確要求用戶端不能把方法從 POST 改成 GET——302 在部分舊瀏覽器的實作上會把後續請求方法改成 GET,307 是為了消除這個歧義而生的版本,語意更精確。

304:用戶端請求的頁面內容沒有變更,直接沿用本地快取的版本,不用重新下載——這是瀏覽器快取機制運作的核心狀態碼,搭配 ETagLast-Modified 這類標頭一起看。

4xx:用戶端錯誤

狀態碼意思
400請求格式錯誤,伺服器看不懂
401未經授權(沒登入,或憑證無效)
403禁止存取(已知道你是誰,但沒有權限)
404找不到資源
405方法不被允許(例如對一個只接受 GET 的路徑發 POST)
429請求過於頻繁(觸發 rate limit)

401 跟 403 常被搞混:401 是「你還沒證明自己是誰」(該去登入),403 是「知道你是誰了,但你沒有權限做這件事」——一個是身分問題,一個是權限問題。

5xx:伺服器錯誤

狀態碼意思
500內部伺服器錯誤(籠統的「後端壞了」)
502閘道收到無效回應(反向代理或負載平衡器後面的伺服器沒有正常回應)
503服務無法使用(伺服器過載或維護中)
504閘道逾時(後端伺服器處理太久沒回應)

看到 4xx 不要先急著懷疑自己的程式碼寫錯——先確認是不是請求本身的問題(網址、方法、授權標頭);看到 5xx 通常代表問題出在對方伺服器,前端能做的有限,通常是加上重試機制或錯誤提示。

現在還適用嗎

HTTP 狀態碼的定義本身是穩定的規範,這幾年沒有本質上的變化,429(Too Many Requests)是相對後來才廣泛使用的狀態碼,API 限流的情境現在很常見。這篇原始筆記裡列的許多細碼(像 401.1~401.7、403.1~403.20 這類)是 IIS 專屬的擴充子狀態碼,只在 IIS 的錯誤紀錄裡看得到,不是 HTTP 規格本身定義的一部分,一般前端開發不太需要背這些,這裡就不逐條列出。

參考資料

分享這篇