1. 程式人生 > 實用技巧 >【一天一個知識點系列】- Http之狀態碼

【一天一個知識點系列】- Http之狀態碼

狀態碼

簡介

  • HTTP 狀態碼負責表示客戶端 HTTP 請求的返回結果、 標記伺服器端的處理是否正常、 通知出現的錯誤等工作

作用及類別

  • 作用:狀態碼告知從伺服器端返回的請求結果

  • 狀態碼的類別
  • 注意:只要遵守狀態碼類別的定義, 即使改變 RFC2616 中定義的狀態碼,或伺服器端自行建立狀態碼都沒問題

具體含義

2XX 成功

  • 含義:2XX 的響應結果表明請求被正常處理了
  • 型別:
    • 200 OK:表示從客戶端發來的請求在伺服器端被正常處理了
    • 狀態碼 200 附圖
    • 204 No Content:該狀態碼代表伺服器接收的請求已成功處理, 但在返回的響應報文中不含實體的主體部分,也不允許返回任何實體的主體
    • 狀態碼 204 附圖
    • 206 Partial Content:表示客戶端進行了範圍請求, 而伺服器成功執行了這部分的 GET 請求,響應報文中包含由 Content-Range 指定範圍的實體內容
    • 狀態碼 206 附圖

3XX 重定向

  • 含義:3XX 響應結果表明瀏覽器需要執行某些特殊的處理以正確處理請求
  • 型別:
    • 301 Moved Permanently:永久性重定向,表示請求的資源已被分配了新的 URI, 以後應使用資源現在所指的 URI
    • 狀態碼 301 附圖
    • 302 Found:臨時性重定向,表示請求的資源已被分配了新的 URI, 希望使用者(本次) 能使用新的 URI
      訪問
    • 狀態碼 302 附圖
    • 301302 區別:
      • 301 狀態碼代表的資源是被永久移動
      • 302 狀態碼代表的資源不是被永久移動, 只是臨時性質的
    • 303 See Other:該狀態碼錶示由於請求對應的資源存在著另一個 URI, 應使用 GET 方法定向獲取請求的資源
    • 狀態碼 303 附圖
    • 區別:303 狀態碼和 302 Found 狀態碼有著相同的功能, 但 303 狀態碼明確表示客戶端應當採用 GET 方法獲取資源, 這點與 302 狀態碼有區別
    • 注意:當 301、 302、 303 響應狀態碼返回時, 幾乎所有的瀏覽器都會把 POST 改成 GET, 並刪除請求報文內的主體, 之後請求會自動再次傳送。301、 302
      標準是禁止將 POST 方法改變成 GET 方法的, 但實際使用時大家都會這麼做
    • 304 Not Modified:表示客戶端傳送附帶條件的請求時, 伺服器端允許請求訪問資源, 但未滿足條件的情況。 304 狀態碼返回時, 不包含任何響應的主體部分。 304 雖然被劃分在 3XX 類別中, 但是和重定向沒有關係
    • 狀態碼 304 附圖
    • 附帶條件的請求:附帶條件的請求是指採用 GET 方法的請求報文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部
    • 307 Temporary Redirect:臨時重定向,含義如302307 會遵照瀏覽器標準, 不會從 POST 變成 GET(儘管 302 標準禁止 POST 變換成 GET, 但實際使用時大家並不遵守)

4XX 客戶端錯誤

  • 含義:4XX 的響應結果表明客戶端是發生錯誤的原因所在
  • 型別:
    • 400 Bad Request :表示請求報文中存在語法錯誤。 當錯誤發生時, 需修改請求的內容後再次傳送請求。 另外, 瀏覽器會像 200 OK 一樣對待該狀態碼
    • 狀態碼 400 附圖
    • 401 Unauthorized:表示傳送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證) 的認證資訊。 另外若之前已進行過 1 次請求, 則表示用 戶認證失敗
    • 狀態碼 401 附圖
    • 注意:返回含有 401 的響應必須包含一個適用於被請求資源的 WWWAuthenticate 首部用以質詢(challenge) 使用者資訊。 當瀏覽器初次接收到 401 響應, 會彈出認證用的對話視窗
    • 403 Forbidden:表示對請求資源的訪問被伺服器拒絕了。 伺服器端沒有必要給出拒絕的詳細理由, 但如果想作說明的話, 可以在實體的主體部分6對原因進行描述, 這樣就能讓使用者看到了
    • 狀態碼 403 附圖
    • 注意:未獲得檔案系統的訪問授權, 訪問許可權出現某些問題(從未授權的傳送源 IP 地址試圖訪問) 等列舉的情況都可能是發生 403 的原因
    • 404 Not Found:表示伺服器上無法找到請求的資源。 除此之外, 也可以在伺服器端拒絕請求且不想說明理由時使用
    • 狀態碼 404 附圖
    • 注意:該狀態碼錶明伺服器上無法找到請求的資源。 除此之外, 也可以在伺服器端拒絕請求且不想說明理由時使用

5XX 伺服器錯誤

  • 含義:5XX 的響應結果表明伺服器本身發生錯誤
  • 型別:
    • 500 Internal Server Error:表示伺服器端在執行請求時發生了錯誤。 也有可能是Web應用存在的 bug 或某些臨時的故障
    • 狀態碼 500 附圖
    • 503 Service Unavailable:表示伺服器暫時處於超負載或正在進行停機維護, 現在無法處理請求。 如果事先得知解除以上狀況需要的時間, 最好寫入 RetryAfter 首部欄位再返回給客戶端
    • 狀態碼 503 附圖

總結

  • 日常使用中,經常會有狀態碼和狀況的不一致的情況。不少返回的狀態碼響應都是錯誤的, 但是使用者可能察覺不到這點。使用時儘量遵循標準,才能一目瞭然