HTTP 常用狀態碼
RFC 標準把狀態碼分成了五類,用數字的第一位表示分類。從 100-599
- 1xx:提示資訊,表示目前是協議處理的中間狀態,還需後續的操作
- 2xx:成功,報文已經收到並被正確處理
- 3xx:重定向,資源位置發生變動,需要客戶端重新發生請求
- 4xx:客戶端錯誤,請求報文有誤,伺服器無法處理
- 5xx:伺服器錯誤,伺服器再處理請求時內部發生了錯誤
1xx
1xx 類狀態碼屬於提示資訊,是協議處理的中間狀態,實際能夠用到的時候很少。
- "101 Switching Protocols" 意思是客戶端使用 Upgrade 頭欄位,要求在 HTTP 協議的基礎上改成其他的協議繼續通訊,比如 WebSocket。而如果伺服器也同意變更協議,就會發送狀態碼 101,但這之後的傳輸就不會再使用 HTTP 了。
2xx
2xx 類狀態碼錶示伺服器收到併成功處理了客戶端請求。
-
"200 OK" 表示處理成功,如果是非 HEAD 請求,通常在響應頭後都會有 body 資料。
-
"204 No Content" 與 狀態碼 200 含義基本相同,但是響應頭後沒有 body 資料。
-
"206 Partial Content" 是 HTTP 分塊下載或斷點續傳的基礎,在客戶端傳送“範圍請求”、要求獲取資源的部分資料時出現。也是表示伺服器成功處理請求,但 body 裡的資料不是資源的全部,而是其中的一部分。
狀態碼 206 通常還會伴隨著頭欄位 “Content-Range” ,表示響應報文裡 body 資料的具體範圍,供客戶端確認。例如 “Content-Range: bytes 0-99/2000”,表示此次獲取的是總計 2000 個位元組的前 100 個位元組。
3xx
3xx 類狀態碼錶示客戶端請求的資源發生了變動,客戶端必須用新的 URI 重新發送請求獲取資源。
-
"301 Moved Permanently" 俗稱“永久重定向”,含義是此次請求的資源已經不存在了,需要改用新的 URI 再次訪問。
-
"302 Found" 俗稱“臨時重定向”,意思是請求的資源還在,但暫時需要另一個 URI 來訪問。
兩者的根本區別在於語義,一個是“永久”,一個是“臨時”。
比如,網站升級到了 HTTPS,原來的 HTTP 不用了,這就是“永久”的。
晚上網站後臺要系統維護,服務暫時不可用,這就屬於“臨時”的,可以配置成 302 跳轉,把流量臨時切換到靜態通知頁面,瀏覽器看到這個 302 就知道是暫時的情況,不會做快取優化。
-
"304 Not Modified" 用於 If-Modified-Since 等條件請求,表示資源未修改,用於快取控制。
4xx
4xx 類狀態碼錶示客戶端傳送的請求報文有誤,伺服器無法處理。
- "400 Bad Request" 是一個通用的錯誤碼,表示請求報文有誤。
- "403 Forbidden" 表示伺服器禁止訪問資源。
- "404 Not Found" 表示資源未找到
5xx
5xx 類狀態碼錶示客戶端請求報文正確,但伺服器在處理時內部發生了錯誤,無法返回應有的響應資料。
- "500 Internal Server Error" 通用錯誤碼,表示伺服器發生錯誤。