1. 程式人生 > >喵星人教你 HTTP 狀態碼

喵星人教你 HTTP 狀態碼

在我們日常 Web 開發中,或多或少的都接觸過 HTTP 狀態碼,那這些狀態碼代表什麼意思呢?熟悉這些狀態碼又有什麼好處呢?下面我就為大家一一道來,可以把本片文章‘收藏’以備不時之需。

HTTP 狀態程式碼表示什麼意思?

HTTP 狀態碼(英語:HTTP Status Code)是用以表示 HTTP 響應狀態的 3 位數字程式碼。比如:

  • 1xx:訊息
  • 2xx:成功
  • 3xx:重定向
  • 4xx:客戶端錯誤
  • 5xx:伺服器錯誤

熟記這些狀態碼可以讓我們在快速定位 Web 開發中遇到的問題、編寫符合規範的介面服務,那麼下面就讓我們看看這些死板的 3 位數字都是什麼意思。擼貓愛好者,請注意:前方高能,屏住呼吸,一大波喵星人即將來襲!

一、1xx 訊息

這一型別的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,表示客戶應該採取的其它行動。

100 Continue(繼續)

伺服器已經接收到請求頭,請求者應當繼續提出請求。伺服器返回此程式碼表示已收到請求的第一部分,正在等待其餘部分。

101 Switching Protocols(切換協議)

伺服器已經理解了客戶端的請求,並將通過 Upgrade 訊息頭通知客戶端採用不同的協議來完成這個請求。在傳送完這個響應後,伺服器將會切換到在 Upgrade 訊息頭中定義的那些協議。

只有在切換新的協議更好的進行通訊。例如:切換到新的 HTTP 版本(如 HTTP/2)比舊版本更有優勢、或切換到一個實時且同步的協議(如 WebSocket)等

二、2xx 成功

這一型別的狀態碼,代表請求已成功被伺服器接收、理解、並接受。

200 OK(成功)

已成功處理了請求。出現此狀態碼是表示正常狀態。

201 Created(已建立)

請求成功並且伺服器建立了新的資源。

202 Accepted(已接受)

伺服器已接受請求,但尚未處理。

204 No Content(無內容)

伺服器成功處理了請求,但沒有返回任何內容。

206 Partial Content(部分內容)

伺服器成功處理了部分 GET 請求。

三、3xx 重定向

這類狀態碼代表需要客戶端採取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,後續的請求地址(重定向目標)在本次響應的 Location 域中指明。

當且僅當後續的請求所使用的方法是 GET 或者 HEAD 時,使用者瀏覽器才可以在沒有使用者介入的情況下自動提交所需要的後續請求。

客戶端應當自動監測無限迴圈重定向(例如:A->A,或者A->B->C->A),因為這會導致伺服器和客戶端大量不必要的資源消耗。按照 HTTP/1.0 版規範的建議,瀏覽器不應自動訪問超過5次的重定向。

300 Multiple Choices(多種選擇)

針對請求,伺服器可執行多種操作。伺服器可根據請求者選擇一項操作,或提供操作列表供請求者選擇。

301 Moved Permanently(永久移動)

請求的資源已永久移動到新位置。伺服器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。

302 Move Temporarily(臨時移動)

請求的資源臨時從不同的 URI 響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址傳送以後的請求。只有在 Cache-Control 或 Expires 中進行了指定的情況下,這個響應才是可快取的。

303 See Other(檢視其他位置)

對應當前請求的響應可以在另一個 URL 上被找到,而且客戶端應當採用 GET 的方式訪問那個資源。這個方法的存在主要是為了允許由指令碼啟用的 POST 請求輸出重定向到一個新的資源。這個新的 URI 不是原始資源的替代引用。同時,303響應禁止被快取。當然,第二個請求(重定向)可能被快取。

304 Not Modified(未修改)

自從上次請求後,請求的資源未修改過。伺服器返回此響應時,不會返回資源的內容,因此可節省頻寬和開銷。

305 Use Proxy(使用代理)

請求者只能使用代理訪問請求的網頁。如果伺服器返回此響應,還表示請求者應使用代理。

307 Temporary Redirect(臨時重定向)

伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來響應以後的請求。 此程式碼與響應 GET 和 HEAD 請求的 301 程式碼類似,會自動將請求者轉到不同的位置,但您不應使用此程式碼來告訴搜尋引擎爬蟲某個頁面或網站已經移動,因為搜尋引擎爬蟲會繼續抓取原有位置並編制索引。

四、4xx 客戶端錯誤

這類的狀態碼代表了客戶端看起來可能發生了錯誤,妨礙了伺服器的處理。

400 Bad Request(錯誤請求)

伺服器不理解請求的語法。

401 Unauthorized(未授權)

請求要求身份驗證。 對於需要登入的網頁,伺服器可能返回此響應。

403 Forbidden(禁止)

伺服器拒絕請求。

404 Not Found(未找到)

伺服器找不到請求的資源。 例如,對於伺服器上不存在的資源經常會返回此程式碼。

405 Method Not Allowed(方法不被允許)

請求中的方法不被允許(HTTP METHOD)。

406 Not Acceptable(不接受)

請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體,該請求不可接受。

408 Request Timeout(請求超時)

伺服器等候請求時發生超時。

409 Conflict(衝突)

由於和被請求的資源的當前狀態之間存在衝突,請求無法完成。

410 Gone(已刪除)

如果請求的資源已永久刪除,伺服器就會返回此響應。

411 Length Required(需要有效長度)

伺服器不接受不含有效內容長度標頭欄位的請求。

412 Precondition Failed(未滿足前提條件)

伺服器未滿足請求者在請求中設定的其中一個前提條件。

413 Request Entity Too Large(請求實體過大)

伺服器無法處理請求,因為請求實體過大,超出伺服器的處理能力。

414 Request-URI Too Long(請求的 URI 過長)

請求的 URI(通常為網址)過長,伺服器無法處理。

415 Unsupported Media Type(不支援的媒體型別)

請求的格式不受請求頁面的支援。

416 Requested Range Not Satisfiable(請求範圍不符合要求)

如果頁面無法提供請求的範圍,則伺服器會返回此狀態程式碼。

417 Expectation Failed(未滿足期望值)

伺服器未滿足"Expect"請求頭欄位的要求。

429 Too Many Requests(請求太頻繁)

使用者在給定的時間內傳送了太多的請求。旨在用於網路限速。

431 Request Header Fields Too Large(請求頭欄位過大)

伺服器不願處理請求,因為一個或多個頭欄位過大。

五、5xx 伺服器錯誤

這類狀態碼代表了伺服器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是伺服器意識到以當前的軟硬體資源無法完成對請求的處理。

500 Internal Server Error(伺服器內部錯誤)

伺服器遇到錯誤,無法完成請求。

502 Bad Gateway(錯誤閘道器)

伺服器作為閘道器或代理,從上游伺服器收到無效響應。

503 Service Unavailable(服務不可用)

伺服器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。

504 Gateway Timeout(閘道器超時)

伺服器作為閘道器或代理,但是沒有及時從上游伺服器收到請求。

文中的圖片整理自 https://http.cat/,內容整理自“維基百科 HTTP 狀態碼”

最後

歡迎留言寫出你家喵星人的品種和你對他的“愛稱”,我很好奇有沒有給自己家貓起名叫 “404” 的小夥伴