【一天一個知識點系列】- Http之狀態碼
阿新 • • 發佈:2021-01-21
狀態碼
簡介
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 附圖
- 301 與 302 區別:
- 301 狀態碼代表的資源是被永久移動
- 302 狀態碼代表的資源不是被永久移動, 只是臨時性質的
- 303 See Other:該狀態碼錶示由於請求對應的資源存在著另一個
URI
, 應使用GET
方法定向獲取請求的資源
- 狀態碼 303 附圖
- 區別:303 狀態碼和 302 Found 狀態碼有著相同的功能, 但 303 狀態碼明確表示客戶端應當採用
GET
方法獲取資源, 這點與 302 狀態碼有區別 - 注意:當 301、 302、 303 響應狀態碼返回時, 幾乎所有的瀏覽器都會把
POST
改成GET
, 並刪除請求報文內的主體, 之後請求會自動再次傳送。301、 302POST
方法改變成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:臨時重定向,含義如302,307 會遵照瀏覽器標準, 不會從
POST
變成GET
(儘管 302 標準禁止POST
變換成GET
, 但實際使用時大家並不遵守)
- 301 Moved Permanently:永久性重定向,表示請求的資源已被分配了新的
③ 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 附圖
- 500 Internal Server Error:表示伺服器端在執行請求時發生了錯誤。 也有可能是
總結
- 日常使用中,經常會有狀態碼和狀況的不一致的情況。不少返回的狀態碼響應都是錯誤的, 但是使用者可能察覺不到這點。使用時儘量遵循標準,才能一目瞭然