前端開發:HTTP狀態碼詳解

三掌櫃發表於2023-02-16

前言

在前端開發過程中,關於HTTP網路請求相關的使用也是必備的,尤其是前後端互動的時候,根據實際業務實現具體需求功能。前端實際開發應用場景中,比較有代表性的關於網路請求相關的使用有:跨域問題/設定代理、介面返回code碼(HTTP狀態碼)、代理、token、cookie欺詐、GET/POST請求等等,這些都是常用知識點。那麼本篇博文就來分享一下關於HTTP狀態碼相關的知識點,尤其是不同開頭的code碼代表的含義,總結一下,方便查閱使用。

HTTP狀態碼是什麼?

維基百科的解釋:HTTP狀態碼(HTTP Status Code)是用以表示網頁伺服器超文字傳輸協議響應狀態的3位數字程式碼。它由 RFC 2616 規範定義的,並得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 與 RFC 4918 等規範擴充套件。所有狀態碼被分為五類,狀態碼的第一個數字代表了響應的五種狀態之一。所示的訊息短語是典型的,但是可以提供任何可讀取的替代方案。 除非另有說明,狀態碼是HTTP/1.1標準(RFC 7231)的一部分。

百度百科的解釋:HTTP狀態碼(HTTP Status Code)是用以表示網頁伺服器HTTP響應狀態的3位數字程式碼。它由 RFC 2616 規範定義的,並得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等規範擴充套件。所有狀態碼的第一個數字代表了響應的五種狀態之一。

個人理解:HTTP狀態碼,也就是一個3位數的HTTP請求響應狀態碼,也就是前端開發中說的code碼,介面根據狀態型別來返回對應的狀態碼。

常見HTTP 狀態碼

作為程式開發者,都知道且在實際開發中常見的HTTP狀態碼,如下所示:

  • 200 - 請求成功;
  • 301 - 資源(網頁等)被永久轉移到其它URL;
  • 304 - 客戶端通常會快取訪問過的資源,透過提供一個Header頭資訊指出客戶端希望只返回在指定日期之後修改的資源資訊;
  • 404 - 請求的資源(網頁等)不存在;
  • 500 - 內部伺服器錯誤。

HTTP狀態碼分類

透過上文可以知道HTTP 狀態碼由三個十進位制數字組成,第一個十進位制數字定義了狀態碼的型別。HTTP響應分為五類:資訊響應(100–199)、成功響應(200–299)、重定向(300–399)、客戶端錯誤(400–499)和伺服器錯誤 (500–599)。具體如下表所示:

HTTP狀態碼詳細分類彙總

全部的HTTP狀態碼有很多,這裡只分享常用的狀態碼,具體如下所示:

1、 1*開頭(資訊提示),表示臨時的響應的狀態碼(注意:客戶端在收到常規響應之前,應準備接收一個或多個 1 * 響應)。

  • 100 - Continue 繼續。初始請求已被接受,客戶應當繼續傳送請求的其餘部分。
  • 101 - Switching Protocols 切換協議。 伺服器將遵從客戶端的請求切換到另外一種協議,且只能切換到更高階的協議。

2、 2**開頭 (請求成功),表示成功接收處理請求的狀態碼。

  • 200 - 請求成功。 伺服器已成功處理了請求, 一般這表示伺服器提供了請求的網頁,主要是用於GET和POST請求。
  • 201 - 已建立。 請求成功並且建立了新的資源。
  • 202 - 已接受。 伺服器已經接受請求,但尚未處理完畢。
  • 203 - 非授權資訊。請求成功,伺服器已成功處理了請求,但返回的meta資訊可能來自另一來源,而是一個副本。
  • 204 - 無內容。 伺服器成功處理請求,但沒有返回任何內容。
  • 205 - 重置內容。 伺服器成功處理請求,但沒有返回任何內容,客戶端應該重置文件檢視。
  • 206 - 部分內容。 伺服器成功處理了部分 GET 請求。

3、 3** 開頭 (請求被重定向),表示要完成請求,需要進一步操作的狀態碼(注意:一般情況下這些狀態程式碼被用來重定向)。

  • 300 - 多種選擇。 請求的資源可包括多個位置,會相應返回一個資源特徵與地址的列表,用於客戶端選擇。
  • 301 - 永久移動。 請求的資源已永久移動到新的位置(URI),返回資訊包括新的URI,瀏覽器會自動重定向到新的URI,往後任何新的請求都要使用心的URI代替。
  • 302 - 臨時移動。與上面的301相似,但是資源只是臨時被移動,客戶端應該繼續使用原有的URI。
  • 303 - 檢視其他地址位置。與上面的301類似,使用GET和POST請求檢視, 請求應當對不同的位置使用單獨的 GET 請求來檢索響應時,伺服器返回此狀態碼。
  • 304 - 未修改。所請求的資源未修改,伺服器返回此狀態碼時,不會返回任何資源。客戶端通常會快取訪問過的資源,透過提供一個Header頭資訊指出客戶端希望只返回在指定日期之後修改的資源。
  • 305 - 使用代理。 所有請求只能使用代理訪問請求網頁。若伺服器返回該響應,表示請求應使用代理。
  • 306 - Switch Proxy。 在最新版的規範中,306狀態碼已經不再被使用,起初是指“後續請求應使用指定的代理”。
  • 307 - 臨時重定向。 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。

4、4**開頭 (請求錯誤),表示請求可能會出錯,妨礙了伺服器的處理。

  • 400 - 錯誤請求。 客戶端請求語法錯誤,伺服器不理解請求的語法。
  • 401 - 未授權。 請求要求使用者進行身份驗證,尤其是需要登入的網頁,伺服器可能返回此響應。
  • 402 - 預留。保留,將來使用。
  • 403 - 禁止。 伺服器已經理解請求客戶端的請求,但是伺服器拒絕執行該請求。
  • 404 - 未找到。 伺服器找不到客戶端請求尋找的資源。
  • 405 - 方法禁用。客戶端請求中的方法被禁止。
  • 406 - 不接受。 伺服器無法根據客戶端請求的內容特性完成請求。
  • 407 - 需要代理授權。和 401(未授權)類似,請求要求代理的身份認證。但請求者應當使用代理進行授權。
  • 408 - 請求超時。 伺服器等候客戶端傳送的請求時間過長,超時。
  • 409 - 衝突。 伺服器在完成客戶端請求時發生衝突,伺服器必須在響應中包含有關衝突的資訊。
  • 410 - 已刪除。 戶端請求的資源已經不存在,如果請求的資源已永久刪除,伺服器就會返回此響應。
  • 411 - 需要有效長度。 伺服器無法處理客戶端傳送的不帶Content-Length的請求資訊,伺服器不接受不含有效內容長度標頭欄位的請求。
  • 412 - 未滿足前提條件。 客戶端請求資訊的先決條件錯誤,伺服器未滿足客戶端請求中設定的其中一個前提條件。
  • 413 - 請求實體過大。 伺服器無法處理請求,超出伺服器的處理能力,因此拒絕請求。
  • 414 - 請求的 URI 過長。 請求的 URI過長(通常為網址),伺服器無法處理。
  • 415 - 不支援的媒體型別。 伺服器無法處理請求附帶的媒體格式,請求的格式不受請求的支援。
  • 416 - 請求範圍不符合要求。 客戶端請求的範圍無效,如果頁面無法提供請求範圍,則會返回此狀態碼。
  • 417 - 未滿足期望值。 伺服器無法滿足Expect的請求頭欄位的要求。

5、 5**開頭(伺服器錯誤),表示伺服器在嘗試處理請求時發生內部錯誤(注意:極有可能是伺服器本身的錯誤,而不是請求本身出錯)。

  • 500 - 伺服器內部錯誤。 伺服器遇到內部錯誤,無法完成請求。
  • 501 - 尚未實施。 伺服器不具備/不支援完成請求的功能,無法完成請求。
  • 502 - 錯誤閘道器。 伺服器作為閘道器或代理嘗試執行請求時,從遠端伺服器接收到一個無效響應。
  • 503 - 服務不可用。 由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中,通常這只是暫時狀態。
  • 504 - 閘道器超時。 伺服器作為閘道器或代理,但沒有及時從遠端伺服器獲取請求。
  • 505 - HTTP 版本不受支援。 伺服器不支援請求中所用的 HTTP 協議的版本,無法完成處理。

6、非官方的狀態碼
除了上面介紹的常用的HTTP狀態碼,還有一些非官方的狀態碼,具體如下所示:

  • 420 - Enhance Your Calm 提高你的耐心。Twitter搜尋與趨勢 API在客戶端被限速的情況下返回。
  • 431 - 請求頭部欄位太大。伺服器因為一個單獨的請求頭欄位或者是全部的欄位太大而不想處理該請求。
  • 444 - No Response 無響應。Nginx上HTTP伺服器擴充套件,伺服器不向客戶端返回任何資訊。
  • 450 - Blocked by Windows Parental Controls 被Windows家長控制阻塞(微軟)。這是微軟的一個擴充套件,當Windows家長控制開啟並且阻塞指定網頁的訪問的時候被指定。
  • 494 - Request Header Too Large 請求頭太大。與431類似,在錯誤程式碼431提出之前Nginx上使用的擴充套件HTTP程式碼。

7、狀態碼與狀態不一致的情況
實際開發過程中,有時候會遇到返回的狀態碼響應都是錯誤的,但是使用者可能覺察不到這種情況,比如前端應用程式內部發生報錯,但是狀態碼依然返回200,這種情況經常遇到。

8、其他:IIS
微軟網際網路資訊服務 (Microsoft Internet Information Services),有時候會使用額外的十進位制子程式碼來獲取更多的具體資訊,但這些子程式碼僅僅出現在響應有效內容和文件中,但不會代替實際的HTTP狀態碼。

最後

透過本文可以知道前端開發中HTTP狀態碼的詳細內容,需要了解掌握的是五個大的狀態型別表示的含義,以及常用的幾個具體的狀態碼錶示的含義,尤其是從事前端開發不就的開發者來說甚為重要,因為在前端求職面試的時候關於前端HTTP狀態碼相關的問題是必考內容,還有關於HTTP請求的特點的考察,所以重要性不言而喻,這裡不再贅述。以上就是本文全部內容,歡迎關注三掌櫃!

本文參與了「SegmentFault 思否寫作挑戰賽」,歡迎正在閱讀的你也加入。

相關文章