1. 程式人生 > 其它 >HTTP 常用狀態碼

HTTP 常用狀態碼

RFC 標準把狀態碼分成了五類,用數字的第一位表示分類。從 100-599

  • 1xx:提示資訊,表示目前是協議處理的中間狀態,還需後續的操作
  • 2xx:成功,報文已經收到並被正確處理
  • 3xx:重定向,資源位置發生變動,需要客戶端重新發生請求
  • 4xx:客戶端錯誤,請求報文有誤,伺服器無法處理
  • 5xx:伺服器錯誤,伺服器再處理請求時內部發生了錯誤

1xx

1xx 類狀態碼屬於提示資訊,是協議處理的中間狀態,實際能夠用到的時候很少。

  1. "101 Switching Protocols" 意思是客戶端使用 Upgrade 頭欄位,要求在 HTTP 協議的基礎上改成其他的協議繼續通訊,比如 WebSocket。而如果伺服器也同意變更協議,就會發送狀態碼 101,但這之後的傳輸就不會再使用 HTTP 了。

2xx

2xx 類狀態碼錶示伺服器收到併成功處理了客戶端請求。

  1. "200 OK" 表示處理成功,如果是非 HEAD 請求,通常在響應頭後都會有 body 資料

  2. "204 No Content" 與 狀態碼 200 含義基本相同,但是響應頭後沒有 body 資料

  3. "206 Partial Content" 是 HTTP 分塊下載或斷點續傳的基礎,在客戶端傳送“範圍請求”、要求獲取資源的部分資料時出現。也是表示伺服器成功處理請求,但 body 裡的資料不是資源的全部,而是其中的一部分。

    狀態碼 206 通常還會伴隨著頭欄位 “Content-Range” ,表示響應報文裡 body 資料的具體範圍,供客戶端確認。例如 “Content-Range: bytes 0-99/2000”,表示此次獲取的是總計 2000 個位元組的前 100 個位元組。

3xx

3xx 類狀態碼錶示客戶端請求的資源發生了變動,客戶端必須用新的 URI 重新發送請求獲取資源。

  1. "301 Moved Permanently" 俗稱“永久重定向”,含義是此次請求的資源已經不存在了,需要改用新的 URI 再次訪問。

  2. "302 Found" 俗稱“臨時重定向”,意思是請求的資源還在,但暫時需要另一個 URI 來訪問。

    兩者的根本區別在於語義,一個是“永久”,一個是“臨時”。

    比如,網站升級到了 HTTPS,原來的 HTTP 不用了,這就是“永久”的。

    ​ 晚上網站後臺要系統維護,服務暫時不可用,這就屬於“臨時”的,可以配置成 302 跳轉,把流量臨時切換到靜態通知頁面,瀏覽器看到這個 302 就知道是暫時的情況,不會做快取優化。

  3. "304 Not Modified" 用於 If-Modified-Since 等條件請求,表示資源未修改,用於快取控制。

4xx

4xx 類狀態碼錶示客戶端傳送的請求報文有誤,伺服器無法處理。

  1. "400 Bad Request" 是一個通用的錯誤碼,表示請求報文有誤。
  2. "403 Forbidden" 表示伺服器禁止訪問資源。
  3. "404 Not Found" 表示資源未找到

5xx

5xx 類狀態碼錶示客戶端請求報文正確,但伺服器在處理時內部發生了錯誤,無法返回應有的響應資料。

  1. "500 Internal Server Error" 通用錯誤碼,表示伺服器發生錯誤。