1xx:表示臨時響應
100:(繼續)請求者應當繼續提出請求。服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分
101:(切換協議)請求者已要求服務器切換協議,服務器已確認並准備切換
2xx:表示成功處理了請求的狀態代碼
200(成功)服務器已成功處理了請求,通常,這表示服務器提供了請求的頁面
204(重置內容)服務器成功處理了請求,但沒有返回任何內容
206(部分內容)服務器成功處理了部分GET請求
3xx(重定向):表示要完成請求,需要進一步操作。通常,這些狀態代碼用來重定向
301:(永久移動)請求的頁面已永久移動到新位置。服務器返回此響應(對GET和HEAD請求的響應)時,會自動將請求者轉到新位置
302(臨時移動)服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求
303(查看其他位置)請求者應當對不同的位置使用單獨的GET請求來檢索響應時,服務器返回此代碼
304(未修改)自從上次請求后,請求的頁面未修改過。服務器返回此響應時,不會返回網頁內容
4xx(請求錯誤):這些狀態代碼表示請求可能出錯,妨礙了服務器的處理
400:(錯誤請求)服務器不理解請求的語法
401(未授權)請求要求身份驗證。對於需要登錄的網頁,服務器可能返回此響應
403(禁止)服務器拒絕請求
404(未找到)服務器找不到請求的網頁
405(方法禁用)禁用請求中指定的方法
406(不接受)無法使用請求的內容特性響應請求的網頁
408(請求超時)服務器等候請求時發生超時
414(請求的URI過長)請求的URI(通常為網址)過長,服務器無法處理
415(不支持的媒體類型)請求的格式不受請求頁面的支持
416(請求范圍不符合要求)如果頁面無法提供請求的范圍,則服務器會返回此狀態碼
499
5xx(服務器錯誤)這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。這些錯誤可能是服務器本身的錯誤,而不是請求出錯
500(服務器內部錯誤)服務器遇到錯誤,無法完成請求
501(尚未實施)服務器不具備完成請求的功能,例如,服務器無法識別請求方法時可能會返回此代碼
502(錯誤網關)服務器作為網關和代理,從上游服務器收到無效響應
503(服務器不可用)服務器目前無法使用(由於超載或者停機維護)。通常,這只是暫時狀態
504(網關超時)服務器作為網關或者代理,但是沒有及時從上游服務器收到請求
505(HTTP版本不受支持)服務器不支持請求中所用的HTTP協議版本
428 Precondition Required (要求先決條件)
先決條件是客戶端發送 HTTP 請求時,如果想要請求能成功必須滿足一些預設的條件。
一個好的例子就是 If-None-Match 頭,經常在 GET 請求中使用,如果指定了 If-None-Match ,那么客戶端只在響應中的 ETag 改變后才會重新接收回應。
先決條件的另外一個例子就是 If-Match 頭,這個一般用在 PUT 請求上用於指示只更新沒被改變的資源,這在多個客戶端使用 HTTP 服務時用來防止彼此間不會覆蓋相同內容。
當服務器端使用 428 Precondition Required 狀態碼時,表示客戶端必須發送上述的請求頭才能執行請求,這個方法為服務器提供一種有效的方法來阻止 'lost update' 問題。
429 Too Many Requests (太多請求)
當你需要限制客戶端請求某個服務數量時,該狀態碼就很有用,也就是請求速度限制。
在此之前,有一些類似的狀態碼,例如 '509 Bandwidth Limit Exceeded'. Twitter 使用 420 (這不是HTTP定義的狀態碼)
如果你希望限制客戶端對服務的請求數,可使用 429 狀態碼,同時包含一個 Retry-After 響應頭用於告訴客戶端多長時間后可以再次請求服務。
431 Request Header Fields Too Large (請求頭字段太大)
某些情況下,客戶端發送 HTTP 請求頭會變得很大,那么服務器可發送 431 Request Header Fields Too Large 來指明該問題。
我不太清楚為什么沒有 430 狀態碼,而是直接從 429 跳到 431,我嘗試搜索但沒有結果。唯一的猜測是 430 Forbidden 跟 403 Forbidden 太像了,為了避免混淆才這么做的,天知道!
511 Network Authentication Required (要求網絡認證)
對我來說這個狀態碼很有趣,如果你在開發一個 HTTP 服務器,你不一定需要處理該狀態碼,但如果你在編寫 HTTP 客戶端,那這個狀態碼就非常重要。
如果你頻繁使用筆記本和智能手機,你可能會注意到大量的公用 WIFI 服務要求你必須接受一些協議或者必須登錄后才能使用。
這是通過攔截HTTP流量,當用戶試圖訪問網絡返回一個重定向和登錄,這很討厭,但是實際情況就是這樣的。
使用這些“攔截”客戶端,會有一些討厭的副作用。在 RFC 中有提到這兩個的例子:
如果你在登錄WIFI前訪問某個網站,網絡設備將會攔截首個請求,這些設備往往也有自己的網站圖標 ‘favicon.ico'。登錄后您會發現,有一段時間內你訪問的網站圖標一直是WIFI登錄網站的圖標。
如果客戶端使用HTTP請求來查找文檔(可能是JSON),網絡將會響應一個登錄頁,這樣你的客戶端就會解析錯誤並導致客戶端運行異常,在現實中這種問題非常常見。
因此 511 狀態碼的提出就是為了解決這個問題。
如果你正在編寫 HTTP 的客戶端,你最好還是檢查 511 狀態碼以確認是否需要認證后才能訪問。