<a href="http://www.cnblogs.com/shanyou/archive/2012/05/06/2486134.html">原文位址</a>
使用asp.net/php/jsp 或者javascript都會用到http的不同狀态,一些常見的狀态碼為:
200 – 伺服器成功傳回網頁 404 – 請求的網頁不存在 503 – 服務不可用
1xx(臨時響應)
表示臨時響應并需要請求者繼續執行操作的狀态代碼。
代碼 說明
100 (繼續) 請求者應當繼續提出請求。 伺服器傳回此代碼表示已收到請求的第一部分,正在等待其餘部分。
101 (切換協定) 請求者已要求伺服器切換協定,伺服器已确認并準備切換。
2xx (成功)
表示成功處理了請求的狀态代碼。
200 (成功) 伺服器已成功處理了請求。 通常,這表示伺服器提供了請求的網頁。
201 (已建立) 請求成功并且伺服器建立了新的資源。
202 (已接受) 伺服器已接受請求,但尚未處理。
203 (非授權資訊) 伺服器已成功處理了請求,但傳回的資訊可能來自另一來源。
204 (無内容) 伺服器成功處理了請求,但沒有傳回任何内容。
205 (重置内容) 伺服器成功處理了請求,但沒有傳回任何内容。
206 (部分内容) 伺服器成功處理了部分 get 請求。
3xx (重定向)
表示要完成請求,需要進一步操作。 通常,這些狀态代碼用來重定向。
300 (多種選擇) 針對請求,伺服器可執行多種操作。 伺服器可根據請求者 (user agent) 選擇一項操作,或提供操作清單供請求者選擇。
301 (永久移動) 請求的網頁已永久移動到新位置。 伺服器傳回此響應(對 get 或 head 請求的響應)時,會自動将請求者轉到新位置。
302 (臨時移動) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
303 (檢視其他位置) 請求者應當對不同的位置使用單獨的 get 請求來檢索響應時,伺服器傳回此代碼。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 伺服器傳回此響應時,不會傳回網頁内容。
305 (使用代理) 請求者隻能使用代理通路請求的網頁。 如果伺服器傳回此響應,還表示請求者應使用代理。
307 (臨時重定向) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
4xx(請求錯誤)
這些狀态代碼表示請求可能出錯,妨礙了伺服器的處理。
400 (錯誤請求) 伺服器不了解請求的文法。
401 (未授權) 請求要求身份驗證。 對于需要登入的網頁,伺服器可能傳回此響應。
403 (禁止) 伺服器拒絕請求。
404 (未找到) 伺服器找不到請求的網頁。
405 (方法禁用) 禁用請求中指定的方法。
406 (不接受) 無法使用請求的内容特性響應請求的網頁。
407 (需要代理授權) 此狀态代碼與 401(未授權)類似,但指定請求者應當授權使用代理。
408 (請求逾時) 伺服器等候請求時發生逾時。
409 (沖突) 伺服器在完成請求時發生沖突。 伺服器必須在響應中包含有關沖突的資訊。
410 (已删除) 如果請求的資源已永久删除,伺服器就會傳回此響應。
411 (需要有效長度) 伺服器不接受不含有效内容長度标頭字段的請求。
412 (未滿足前提條件) 伺服器未滿足請求者在請求中設定的其中一個前提條件。
413 (請求實體過大) 伺服器無法處理請求,因為請求實體過大,超出伺服器的處理能力。
414 (請求的 uri 過長) 請求的 uri(通常為網址)過長,伺服器無法處理。
415 (不支援的媒體類型) 請求的格式不受請求頁面的支援。
416 (請求範圍不符合要求) 如果頁面無法提供請求的範圍,則伺服器會傳回此狀态代碼。
417 (未滿足期望值) 伺服器未滿足”期望”請求标頭字段的要求。
5xx(伺服器錯誤)
這些狀态代碼表示伺服器在嘗試處理請求時發生内部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。
500 (伺服器内部錯誤) 伺服器遇到錯誤,無法完成請求。
501 (尚未實施) 伺服器不具備完成請求的功能。 例如,伺服器無法識别請求方法時可能會傳回此代碼。
502 (錯誤網關) 伺服器作為網關或代理,從上遊伺服器收到無效響應。
503 (服務不可用) 伺服器目前無法使用(由于超載或停機維護)。 通常,這隻是暫時狀态。
504 (網關逾時) 伺服器作為網關或代理,但是沒有及時從上遊伺服器收到請求。
505 (http 版本不受支援) 伺服器不支援請求中所用的 http 協定版本。
rfc 6585 最近剛剛釋出,該文檔描述了 4 個新的 http 狀态碼。
http 協定還在變化?是的,http 協定一直在演變,新的狀态碼對于開發 rest 服務或者說是基于 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 狀态碼以确認是否需要認證後才能通路。
<a href="https://evertpot.com/new-http-status-codes/">英文原文</a>