面試突擊53:常見的 HTTP 狀態碼有哪些?

語言: CN / TW / HK

HTTP 狀態碼是伺服器端返回給客戶端的響應狀態碼,根據(HTTP)狀態碼我們就能知道伺服器端想要給客戶端表達的具體含義,比如 200 就表示請求訪問成功,500 就表示伺服器端程式出錯等。

HTTP 狀態碼可分為 5 大類:

  1. 1XX:訊息狀態碼。
  2. 2XX:成功狀態碼。
  3. 3XX:重定向狀態碼。
  4. 4XX:客戶端錯誤狀態碼。
  5. 5XX:服務端錯誤狀態碼。

而這 5 大類中又包含了很多具體的狀態碼。

1XX

訊息狀態碼,其中:

  • 100:Continue 繼續。客戶端應繼續其請求。
  • 101:Switching Protocols 切換協議。伺服器根據客戶端的請求切換協議。只能切換到更高階的協議,例如,切換到 HTTP 的新版本協議。

    2XX

    成功狀態碼,其中:

  • 200:OK 請求成功。一般用於 GET 與 POST 請求。
  • 201:Created 已建立。成功請求並建立了新的資源。
  • 202:Accepted 已接受。已經接受請求,但未處理完成。
  • 203:Non-Authoritative Information 非授權資訊。請求成功。但返回的 meta 資訊不在原始的伺服器,而是一個副本。
  • 204:No Content 無內容。伺服器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文件。
  • 205:Reset Content 重置內容。伺服器處理成功,使用者終端(例如:瀏覽器)應重置文件檢視。可通過此返回碼清除瀏覽器的表單域。
  • 206:Partial Content 部分內容。伺服器成功處理了部分 GET 請求。

    3XX

    重定向狀態碼,其中:

  • 300:Multiple Choices 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特徵與地址的列表用於使用者終端(例如:瀏覽器)選擇。
  • 301:Moved Permanently 永久移動。請求的資源已被永久的移動到新 URI,返回資訊會包括新的 URI,瀏覽器會自動定向到新 URI。今後任何新的請求都應使用新的 URI 代替。
  • 302:Found 臨時移動,與 301 類似。但資源只是臨時被移動。客戶端應繼續使用原有URI。
  • 303:See Other 檢視其它地址。與 301 類似。使用 GET 和 POST 請求檢視。
  • 304:Not Modified 未修改。所請求的資源未修改,伺服器返回此狀態碼時,不會返回任何資源。客戶端通常會快取訪問過的資源,通過提供一個頭資訊指出客戶端希望只返回在指定日期之後修改的資源。
  • 305:Use Proxy 使用代理。所請求的資源必須通過代理訪問。
  • 306:Unused 已經被廢棄的 HTTP 狀態碼。
  • 307:Temporary Redirect 臨時重定向。與 302 類似。使用 GET 請求重定向。

    4XX

    客戶端錯誤狀態碼,其中:

  • 400:Bad Request 客戶端請求的語法錯誤,伺服器無法理解。
  • 401:Unauthorized 請求要求使用者的身份認證。
  • 402:Payment Required 保留,將來使用。
  • 403:Forbidden 伺服器理解請求客戶端的請求,但是拒絕執行此請求。
  • 404:Not Found 伺服器無法根據客戶端的請求找到資源(網頁)。通過此程式碼,網站設計人員可設定"您所請求的資源無法找到"的個性頁面。
  • 405:Method Not Allowed 客戶端請求中的方法被禁止。
  • 406:Not Acceptable 伺服器無法根據客戶端請求的內容特性完成請求。
  • 407:Proxy Authentication Required 請求要求代理的身份認證,與 401 類似,但請求者應當使用代理進行授權。
  • 408:Request Time-out 伺服器等待客戶端傳送的請求時間過長,超時。
  • 409:Conflict 伺服器完成客戶端的 PUT 請求時可能返回此程式碼,伺服器處理請求時發生了衝突。
  • 410:Gone 客戶端請求的資源已經不存在。410 不同於 404,如果資源以前有現在被永久刪除了可使用 410 程式碼,網站設計人員可通過 301 程式碼指定資源的新位置。
  • 411:Length Required 伺服器無法處理客戶端傳送的不帶 Content-Length 的請求資訊。
  • 412:Precondition Failed 客戶端請求資訊的先決條件錯誤。
  • 413:Request Entity Too Large 由於請求的實體過大,伺服器無法處理,因此拒絕請求。為防止客戶端的連續請求,伺服器可能會關閉連線。如果只是伺服器暫時無法處理,則會包含一個 Retry-After 的響應資訊。
  • 414:Request-URI Too Large 請求的 URI 過長(URI通常為網址),伺服器無法處理。
  • 415:Unsupported Media Type 伺服器無法處理請求附帶的媒體格式。
  • 416:Requested range not satisfiable 客戶端請求的範圍無效。
  • 417:Expectation Failed 伺服器無法滿足 Expect 的請求頭資訊。

    5XX

    服務端錯誤狀態碼,其中:

  • 500:Internal Server Error 伺服器內部錯誤,無法完成請求。
  • 501:Not Implemented 伺服器不支援請求的功能,無法完成請求。
  • 502:Bad Gateway 作為閘道器或者代理工作的伺服器嘗試執行請求時,從遠端伺服器接收到了一個無效的響應。
  • 503:Service Unavailable 由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中。
  • 504:Gateway Time-out 充當閘道器或代理的伺服器,未及時從遠端伺服器獲取請求。
  • 505:HTTP Version not supported 伺服器不支援請求的HTTP協議的版本,無法完成處理。

    總結

    HTTP 狀態碼分為 5 大類:1XX:表示訊息狀態碼;2XX:表示成功狀態碼;3XX:表示重定向狀態碼;4XX:表示客戶端錯誤狀態碼;5XX:表示服務端錯誤狀態碼。其中常見的具體狀態碼有:200:請求成功;301:永久重定向;302:臨時重定向;404:無法找到此頁面;405:請求的方法型別不支援;500:伺服器內部出錯。

參考 & 鳴謝

www.runoob.com/http/http-status-codes.html

是非審之於己,譭譽聽之於人,得失安之於數。

公眾號:Java面試真題解析

面試合集: http://gitee.com/mydb/interview