[toc]
# 概念
當(dāng)瀏覽者訪問(wèn)一個(gè)網(wǎng)頁(yè)時(shí),瀏覽者的瀏覽器會(huì)向網(wǎng)頁(yè)所在服務(wù)器發(fā)出請(qǐng)求。當(dāng)瀏覽器接收并顯示網(wǎng)頁(yè)前,此網(wǎng)頁(yè)所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請(qǐng)求。
HTTP狀態(tài)碼的英文為HTTP Status Code。
# 下面是常見(jiàn)的HTTP狀態(tài)碼:
* 200 - 請(qǐng)求成功
* 301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它URL
* 404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在
* 500 - 內(nèi)部服務(wù)器錯(cuò)誤
# HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒(méi)有分類的作用。HTTP狀態(tài)碼共分為5種類型:
| 分類 | 功能描述 |
| :----:| :---- |
| 1** | 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作 |
| 2** | 成功,操作被成功接收并處理 |
| 3** | 重定向,需要進(jìn)一步的操作以完成請(qǐng)求 |
| 4** | 客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求 |
| 5** | 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤 |
# HTTP狀態(tài)碼查詢字典
收集了些常見(jiàn)的狀態(tài)碼,方便伙伴們查詢使用
| 狀態(tài)碼 | 原因短語(yǔ) | 功能描述 | 版本 |
| :-----| :---- | :---- |:---- |
| 100 | Continue (繼續(xù)) | 客戶端應(yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求.這個(gè)臨時(shí)響應(yīng)是用來(lái)通知客戶端它的部分請(qǐng)求已經(jīng)被服務(wù)器接收,且仍未被拒絕.客戶端應(yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求的剩余部分,或者如果請(qǐng)求已經(jīng)完成,忽略這個(gè)響應(yīng).服務(wù)器必須在請(qǐng)求完成后向客戶端發(fā)送一個(gè)最終響應(yīng). |HTTP/1.1 可用 |
| 101 | Switching Protocol (切換協(xié)議) | 服務(wù)器已經(jīng)理解了客戶端的請(qǐng)求,并將通過(guò)Upgrade消息頭通知客戶端采用不同的協(xié)議來(lái)完成這個(gè)請(qǐng)求。在發(fā)送完這個(gè)響應(yīng)最后的空行后,服務(wù)器將會(huì)切換到 在Upgrade消息頭中定義的那些協(xié)議。: 只有在切換新的協(xié)議更有好處的時(shí)候才應(yīng)該采取類似措施。例如,切換到新的HTTP版本比舊版本更有優(yōu)勢(shì),或者切換到一個(gè)實(shí)時(shí)且同步的協(xié)議以傳送利用此類特 性的資源。 | HTTP/1.1 可用 |
| 102 | Processing (Web DAV) | 此代碼表示服務(wù)器已收到并正在處理該請(qǐng)求,但沒(méi)有響應(yīng)可用。 |HTTP 1.1可用 |
| 103 | Early Hints (早期提示) | 此狀態(tài)代碼主要用于與Link 鏈接頭一起使用,以允許用戶代理在服務(wù)器仍在準(zhǔn)備響應(yīng)時(shí)開(kāi)始預(yù)加載資源。 |HTTP 1.1可用 |
| 200 | OK(成功) | 單元格 |HTTP/0.9 可用 |
| 201 | Created(已創(chuàng)建) | 請(qǐng)求成功,而且有一個(gè)新的資源已經(jīng)依據(jù)請(qǐng)求的需要而建立,通常這是 PUT 方法得到的響應(yīng)碼. | HTTP/0.9 可用 |
| 202 | Accepted(已接受) | 服務(wù)器已接受請(qǐng)求,但尚未處理。正如它可能被拒絕一樣,最終該請(qǐng)求可能會(huì)也可能不會(huì)被執(zhí)行。在異步操作的場(chǎng)合下,沒(méi)有比發(fā)送這個(gè)狀態(tài)碼更方便的做法了。:返回202狀態(tài)碼的響應(yīng)的目的是允許服務(wù)器接受其他過(guò)程的請(qǐng)求(例如某個(gè)每天只執(zhí)行一次的基于批處理的操作),而不必讓客戶端一直保持與服務(wù)器的連接直到批處理操作全部完成。在接受請(qǐng)求處理并返回202狀態(tài)碼的響應(yīng)應(yīng)當(dāng)在返回的實(shí)體中包含一些指示處理當(dāng)前狀態(tài)的信息,以及指向處理狀態(tài)監(jiān)視器或狀態(tài)預(yù)測(cè)的指針,以便用戶能夠估計(jì)操作是否已經(jīng)完成。 |HTTP/0.9 可用 |
| 203 | Non-Authoritative Information(未授權(quán)信息) | 服務(wù)器已成功處理了請(qǐng)求,但返回的實(shí)體頭部元信息不是在原始服務(wù)器上有效的確定集合,而是來(lái)自本地或者第三方的拷貝,如果不是上述情況,使用200狀態(tài)碼才是最合適的. | HTTP/0.9 and 1.1 |
| 204 | No Content(無(wú)內(nèi)容) | 該響應(yīng)沒(méi)有響應(yīng)內(nèi)容,只有響應(yīng)頭,響應(yīng)頭也可能是有用的.用戶代理可以根據(jù)新的響應(yīng)頭來(lái)更新對(duì)應(yīng)資源的緩存信息. |HTTP/0.9 可用 |
| 205 | Reset Content(重置內(nèi)容) | 告訴用戶代理去重置發(fā)送該請(qǐng)求的窗口的文檔視圖. | HTTP/0.9 and 1.1 |
| 206 | Partial Content(部分內(nèi)容) | 當(dāng)客戶端通過(guò)使用range頭字段進(jìn)行文件分段下載時(shí)使用該狀態(tài)碼 |HTTP/0.9 and 1.1 |
| 300 | Multiple Choice(多種選擇) | 該請(qǐng)求有多種可能的響應(yīng),用戶代理或者用戶必須選擇它們其中的一個(gè).服務(wù)器沒(méi)有任何標(biāo)準(zhǔn)可以遵循去代替用戶來(lái)進(jìn)行選擇. | HTTP/1.0 and later |
| 301 | Moved Permanently(永久移動(dòng)) | 該狀態(tài)碼表示所請(qǐng)求的URI資源路徑已經(jīng)改變,新的URL會(huì)在響應(yīng)的Location:頭字段里找到. |HTTP/0.9 可用 |
| 302 | Found(臨時(shí)移動(dòng)) | 該狀態(tài)碼表示所請(qǐng)求的URI資源路徑臨時(shí)改變,并且還可能繼續(xù)改變.因此客戶端在以后訪問(wèn)時(shí)還得繼續(xù)使用該URI.新的URL會(huì)在響應(yīng)的Location:頭字段里找到. | HTTP/0.9 可用 |
| 303 | See Other(查看其他位置) | 服務(wù)器發(fā)送該響應(yīng)用來(lái)引導(dǎo)客戶端使用GET方法訪問(wèn)另外一個(gè)URI. |HTTP/0.9 and 1.1 |
| 304 | Not Modified(未修改) | 告訴客戶端,所請(qǐng)求的內(nèi)容距離上次訪問(wèn)并沒(méi)有變化. 客戶端可以直接從瀏覽器緩存里獲取該資源. | HTTP/0.9 可用 |
| 305 | Use Proxy(使用代理) | 所請(qǐng)求的資源必須統(tǒng)過(guò)代理才能訪問(wèn)到.由于安全原因,該狀態(tài)碼并未受到廣泛支持. |HTTP/0.9 可用 |
| 306 | unused(未使用) | 這個(gè)狀態(tài)碼已經(jīng)不再被使用,當(dāng)初它被用在HTTP 1.1規(guī)范的舊版本中. | HTTP/0.9 可用 |
| 307 | Temporary Redirect(臨時(shí)重定向) | 服務(wù)器發(fā)送該響應(yīng)用來(lái)引導(dǎo)客戶端使用相同的方法訪問(wèn)另外一個(gè)URI來(lái)獲取想要獲取的資源.新的URL會(huì)在響應(yīng)的Location:頭字段里找到.與302狀態(tài)碼有相同的語(yǔ)義,且前后兩次訪問(wèn)必須使用相同的方法(GET POST). |HTTP/0.9 可用 |
| 308 | Permanent Redirect(永久重定向) | 所請(qǐng)求的資源將永久的位于另外一個(gè)URI上.新的URL會(huì)在響應(yīng)的Location:頭字段里找到.與301狀態(tài)碼有相同的語(yǔ)義,且前后兩次訪問(wèn)必須使用相同的方法(GET POST). | HTTPbis (試驗(yàn)草案) |
| 400 | Bad Request(錯(cuò)誤請(qǐng)求) | 因發(fā)送的請(qǐng)求語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法正常讀取. |HTTP/0.9 可用 |
| 401 | Unauthorized(未授權(quán)) | 需要身份驗(yàn)證后才能獲取所請(qǐng)求的內(nèi)容,類似于403錯(cuò)誤.不同點(diǎn)是.401錯(cuò)誤后,只要正確輸入帳號(hào)密碼,驗(yàn)證即可通過(guò). | HTTP/0.9 可用 |
| 402 | Payment Required(需要付款) | 該狀態(tài)碼被保留以供將來(lái)使用.創(chuàng)建此代碼最初的目的是為數(shù)字支付系統(tǒng)而用,然而,到現(xiàn)在也沒(méi)投入使用. |HTTP/0.9 and 1.1 |
| 403 | Forbidden(禁止訪問(wèn)) | 客戶端沒(méi)有權(quán)利訪問(wèn)所請(qǐng)求內(nèi)容,服務(wù)器拒絕本次請(qǐng)求. | HTTP/0.9 可用 |
| 404 | Not Found(未找到) | 服務(wù)器找不到所請(qǐng)求的資源.由于經(jīng)常發(fā)生此種情況,所以該狀態(tài)碼在上網(wǎng)時(shí)是非常常見(jiàn)的. |HTTP/0.9 可用 |
| 405 | Method Not Allowed(不允許使用該方法) | 該請(qǐng)求使用的方法被服務(wù)器端禁止使用,RFC2616中規(guī)定, GET 和 HEAD 方法不能被禁止. | HTTP/1.1 可用 |
| 406 | Not Acceptable(無(wú)法接受) | 在進(jìn)行服務(wù)器驅(qū)動(dòng)內(nèi)容協(xié)商后,沒(méi)有發(fā)現(xiàn)合適的內(nèi)容傳回給客戶端. |HTTP/1.1 可用 |
| 407 | Proxy Authentication Required(要求代理身份驗(yàn)證) | 類似于狀態(tài)碼 401,不過(guò)需要通過(guò)代理才能進(jìn)行驗(yàn)證. | HTTP/1.1 可用 |
| 408 | Request Timeout(請(qǐng)求超時(shí)) | 客戶端沒(méi)有在服務(wù)器預(yù)備等待的時(shí)間內(nèi)完成一個(gè)請(qǐng)求的發(fā)送.這意味著服務(wù)器將會(huì)切斷和客戶端的連接. 在其他瀏覽器中,這種響應(yīng)更常見(jiàn)一些, 例如Chrome 和 IE9, 目的是為了使用HTTP 預(yù)連機(jī)制加快瀏覽速度. 同時(shí)注意,一些服務(wù)器不發(fā)送此種響應(yīng)就直接切斷連接. |HTTP/1.1 可用 |
| 409 | Conflict(沖突) | 該請(qǐng)求與服務(wù)器的當(dāng)前狀態(tài)所沖突. | HTTP/1.1 可用 |
| 410 | Gone(已失效) | 所請(qǐng)求的資源已經(jīng)被刪除. |HTTP/1.1 可用 |
| 411 | Length Required(需要內(nèi)容長(zhǎng)度頭) | 因服務(wù)器在本次請(qǐng)求中需要 Content-Length 頭字段,而客戶端沒(méi)有發(fā)送.所以,服務(wù)器拒絕了該請(qǐng)求. | HTTP/1.1 可用 |
| 412 | Precondition Failed(預(yù)處理失敗) | 服務(wù)器沒(méi)能滿足客戶端在獲取資源時(shí)在請(qǐng)求頭字段中設(shè)置的先決條件. |HTTP/1.1 可用 |
| 413 | Request Entity Too Large(請(qǐng)求實(shí)體過(guò)長(zhǎng)) | 請(qǐng)求實(shí)體大小超過(guò)服務(wù)器的設(shè)置的最大限制,服務(wù)器可能會(huì)關(guān)閉HTTP鏈接并返回Retry-After 頭字段. | HTTP/1.1 可用 |
| 414 | Request-URI Too Long(請(qǐng)求網(wǎng)址過(guò)長(zhǎng)) | 客戶端請(qǐng)求所包含的URI地址太長(zhǎng),以至于服務(wù)器無(wú)法處理. |HTTP/1.1 可用 |
| 415 | Unsupported Media Type(媒體類型不支持) | 服務(wù)器不支持客戶端所請(qǐng)求的媒體類型,因此拒絕該請(qǐng)求. | HTTP/1.1 可用 |
| 416 | Requested Range Not Satisfiable(請(qǐng)求范圍不合要求) | 請(qǐng)求中包含的Range頭字段無(wú)法被滿足,通常是因?yàn)镽ange中的數(shù)字范圍超出所請(qǐng)求資源的大小. |HTTP/1.1 可用 |
| 417 | Expectation Failed(預(yù)期結(jié)果失敗) | 在請(qǐng)求頭 Expect 中指定的預(yù)期內(nèi)容無(wú)法被服務(wù)器滿足. | HTTP/1.1 可用 |
| 500 | Internal Server Error(內(nèi)部服務(wù)器錯(cuò)誤) | 服務(wù)器遇到未知的無(wú)法解決的問(wèn)題. |HTTP/0.9 可用 |
| 501 | Implemented(未實(shí)現(xiàn)) | 服務(wù)器不支持該請(qǐng)求中使用的方法,比如POST 和 PUT.只有GET 和 HEAD 是RFC2616規(guī)范中規(guī)定服務(wù)器必須實(shí)現(xiàn)的方法. | HTTP/0.9 可用 |
| 502 | Bad Gateway(網(wǎng)關(guān)錯(cuò)誤) | 服務(wù)器作為網(wǎng)關(guān)且從上游服務(wù)器獲取到了一個(gè)無(wú)效的HTTP響應(yīng). |HTTP/0.9 可用 |
| 503 | Service Unavailable(服務(wù)不可用) | 由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求.這個(gè)狀況是臨時(shí)的,并且將在一段時(shí)間以后恢復(fù).如果能夠預(yù)計(jì)延遲時(shí)間,那么響應(yīng)中可以包含一個(gè)Retry-After:頭用以標(biāo)明這個(gè)延遲時(shí)間.如果沒(méi)有給出這個(gè)Retry-After:信息,那么客戶端應(yīng)當(dāng)以處理500響應(yīng)的方式處理它.同時(shí),這種情況下,一個(gè)友好的用于解釋服務(wù)器出現(xiàn)問(wèn)題的頁(yè)面應(yīng)當(dāng)被返回,并且,緩存相關(guān)的HTTP頭信息也應(yīng)該包含,因?yàn)橥ǔ_@種錯(cuò)誤提示網(wǎng)頁(yè)不應(yīng)當(dāng)被客戶端緩存. | HTTP/0.9 可用 |
| 504 | Gateway Timeout (網(wǎng)關(guān)超時(shí)) | 服務(wù)器作為網(wǎng)關(guān)且不能從上游服務(wù)器及時(shí)的得到響應(yīng)返回給客戶端. |HTTP/1.1 可用 |
| 505 | HTTP Version Not Supported(HTTP版本不受支持) | 服務(wù)器不支持客戶端發(fā)送的HTTP請(qǐng)求中所使用的HTTP協(xié)議版本. | HTTP/1.1 可用 |
# 瀏覽器兼容性
![](/upload/attach/202101/202011271219_ZKJ5B2SQ4GBKV9M.png)
# 參考資料
* 《HTTP教程》
* 《HTTP響應(yīng)碼》
* 《HTTP 響應(yīng)代碼》