## 狀態(tài)碼
### [](https://github.com/bolasblack/http-api-guide#請(qǐng)求成功)請(qǐng)求成功
* 200?**OK**?: 請(qǐng)求執(zhí)行成功并返回相應(yīng)數(shù)據(jù),如?`GET`?成功
* 201?**Created**?: 對(duì)象創(chuàng)建成功并返回相應(yīng)資源數(shù)據(jù),如?`POST`?成功;創(chuàng)建完成后響應(yīng)頭中應(yīng)該攜帶頭標(biāo)?`Location`?,指向新建資源的地址
* 202?**Accepted**?: 接受請(qǐng)求,但無法立即完成創(chuàng)建行為,比如其中涉及到一個(gè)需要花費(fèi)若干小時(shí)才能完成的任務(wù)。返回的實(shí)體中應(yīng)該包含當(dāng)前狀態(tài)的信息,以及指向處理狀態(tài)監(jiān)視器或狀態(tài)預(yù)測(cè)的指針,以便客戶端能夠獲取最新狀態(tài)。
* 204?**No Content**?: 請(qǐng)求執(zhí)行成功,不返回相應(yīng)資源數(shù)據(jù),如?`PATCH`?,?`DELETE`?成功
### [](https://github.com/bolasblack/http-api-guide#重定向)重定向
**重定向的新地址都需要在響應(yīng)頭?`Location`?中返回**
* 301?**Moved Permanently**?: 被請(qǐng)求的資源已永久移動(dòng)到新位置
* 302?**Found**?: 請(qǐng)求的資源現(xiàn)在臨時(shí)從不同的 URI 響應(yīng)請(qǐng)求
* 303?**See Other**?: 對(duì)應(yīng)當(dāng)前請(qǐng)求的響應(yīng)可以在另一個(gè) URI 上被找到,客戶端應(yīng)該使用?`GET`?方法進(jìn)行請(qǐng)求
* 307?**Temporary Redirect**?: 對(duì)應(yīng)當(dāng)前請(qǐng)求的響應(yīng)可以在另一個(gè) URI 上被找到,客戶端應(yīng)該保持原有的請(qǐng)求方法進(jìn)行請(qǐng)求
### [](https://github.com/bolasblack/http-api-guide#條件請(qǐng)求)條件請(qǐng)求
* 304?**Not Modified**?: 資源自從上次請(qǐng)求后沒有再次發(fā)生變化,主要使用場(chǎng)景在于實(shí)現(xiàn)[數(shù)據(jù)緩存](https://github.com/bolasblack/http-api-guide#user-content-%E6%95%B0%E6%8D%AE%E7%BC%93%E5%AD%98)
* 409?**Conflict**?: 請(qǐng)求操作和資源的當(dāng)前狀態(tài)存在沖突。主要使用場(chǎng)景在于實(shí)現(xiàn)[并發(fā)控制](https://github.com/bolasblack/http-api-guide#user-content-%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6)
* 412?**Precondition Failed**?: 服務(wù)器在驗(yàn)證在請(qǐng)求的頭字段中給出先決條件時(shí),沒能滿足其中的一個(gè)或多個(gè)。主要使用場(chǎng)景在于實(shí)現(xiàn)[并發(fā)控制](https://github.com/bolasblack/http-api-guide#user-content-%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6)
### [](https://github.com/bolasblack/http-api-guide#客戶端錯(cuò)誤)客戶端錯(cuò)誤
* 400?**Bad Request**?: 請(qǐng)求體包含語法錯(cuò)誤
* 401?**Unauthorized**?: 需要驗(yàn)證用戶身份,如果服務(wù)器就算是身份驗(yàn)證后也不允許客戶訪問資源,應(yīng)該響應(yīng)?`403 Forbidden`
* 403?**Forbidden**?: 服務(wù)器拒絕執(zhí)行
* 404?**Not Found**?: 找不到目標(biāo)資源
* 405?**Method Not Allowed**?: 不允許執(zhí)行目標(biāo)方法,響應(yīng)中應(yīng)該帶有?`Allow`?頭,內(nèi)容為對(duì)該資源有效的 HTTP 方法
* 406?**Not Acceptable**?: 服務(wù)器不支持客戶端請(qǐng)求的內(nèi)容格式,但響應(yīng)里會(huì)包含服務(wù)端能夠給出的格式的數(shù)據(jù),并在?`Content-Type`?中聲明格式名稱
* 410?**Gone**?: 被請(qǐng)求的資源已被刪除,只有在確定了這種情況是永久性的時(shí)候才可以使用,否則建議使用?`404 Not Found`
* 413?**Payload Too Large**?:?`POST`?或者?`PUT`?請(qǐng)求的消息實(shí)體過大
* 415?**Unsupported Media Type**?: 服務(wù)器不支持請(qǐng)求中提交的數(shù)據(jù)的格式
* 422?**Unprocessable Entity**?: 請(qǐng)求格式正確,但是由于含有語義錯(cuò)誤,無法響應(yīng)
* 428?**Precondition Required**?: 要求先決條件,如果想要請(qǐng)求能成功必須滿足一些預(yù)設(shè)的條件
### [](https://github.com/bolasblack/http-api-guide#服務(wù)端錯(cuò)誤)服務(wù)端錯(cuò)誤
* 500?**Internal Server Error**?: 服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無法完成對(duì)請(qǐng)求的處理。
* 501?**Not Implemented**?: 服務(wù)器不支持當(dāng)前請(qǐng)求所需要的某個(gè)功能。
* 502?**Bad Gateway**?: 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器接收到無效的響應(yīng)。
* 503?**Service Unavailable**?: 由于臨時(shí)的服務(wù)器維護(hù)或者過載,服務(wù)器當(dāng)前無法處理請(qǐng)求。這個(gè)狀況是臨時(shí)的,并且將在一段時(shí)間以后恢復(fù)。如果能夠預(yù)計(jì)延遲時(shí)間,那么響應(yīng)中可以包含一個(gè)`Retry-After`?頭用以標(biāo)明這個(gè)延遲時(shí)間(內(nèi)容可以為數(shù)字,單位為秒;或者是一個(gè)?[HTTP 協(xié)議指定的時(shí)間格式](http://tools.ietf.org/html/rfc2616#section-3.3))。如果沒有給出這個(gè)?`Retry-After`?信息,那么客戶端應(yīng)當(dāng)以處理 500 響應(yīng)的方式處理它。
`501`?與?`405`?的區(qū)別是:`405`?是表示服務(wù)端不允許客戶端這么做,`501`?是表示客戶端或許可以這么做,但服務(wù)端還沒有實(shí)現(xiàn)這個(gè)功能
相關(guān)資料:
* [RFC 里的狀態(tài)碼列表](http://tools.ietf.org/html/rfc7231#page-49)
* [RFC 4918](http://tools.ietf.org/html/rfc4918)?- 422 狀態(tài)碼的定義
* [RFC 6585](http://tools.ietf.org/html/rfc6585)?- 新增的四個(gè) HTTP 狀態(tài)碼,[中文版](http://www.oschina.net/news/28660/new-http-status-codes)
* [維基百科上的《 HTTP 狀態(tài)碼》詞條](http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)
* [Do I need to use http redirect code 302 or 307? - Stack Overflow](http://stackoverflow.com/questions/2467664/do-i-need-to-use-http-redirect-code-302-or-307)
* [400 vs 422 response to POST of data](http://stackoverflow.com/questions/16133923/400-vs-422-response-to-post-of-data)
