200 OK - [GET]:服務(wù)器成功返回用戶請(qǐng)求的數(shù)據(jù),該操作是冪等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功。
202 Accepted - []:表示一個(gè)請(qǐng)求已經(jīng)進(jìn)入后臺(tái)排隊(duì)(異步任務(wù))
204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發(fā)出的請(qǐng)求有錯(cuò)誤,服務(wù)器沒有進(jìn)行新建或修改數(shù)據(jù)的操作,該操作是冪等的。
401 Unauthorized - []:表示用戶沒有權(quán)限(令牌、用戶名、密碼錯(cuò)誤)。
403 Forbidden - [] 表示用戶得到授權(quán)(與401錯(cuò)誤相對(duì)),但是訪問是被禁止的。
404 NOT FOUND - []:用戶發(fā)出的請(qǐng)求針對(duì)的是不存在的記錄,服務(wù)器沒有進(jìn)行操作,該操作是冪等的。
406 Not Acceptable - [GET]:用戶請(qǐng)求的格式不可得(比如用戶請(qǐng)求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用戶請(qǐng)求的資源被永久刪除,且不會(huì)再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),發(fā)生一個(gè)驗(yàn)證錯(cuò)誤。
500 INTERNAL SERVER ERROR - [*]:服務(wù)器發(fā)生錯(cuò)誤,用戶將無法判斷發(fā)出的請(qǐng)求是否成功。
200這個(gè)最容易理解,就是正確的請(qǐng)求返回正確的結(jié)果,如果不想細(xì)分正確的請(qǐng)求結(jié)果都可以直接返回200。
201表示資源被正確的創(chuàng)建。比如說,我們 POST 用戶名、密碼正確創(chuàng)建了一個(gè)用戶就可以返回 201。
202請(qǐng)求是正確的,但是結(jié)果正在處理中,沒法返回對(duì)應(yīng)的結(jié)果。比如說,我們請(qǐng)求一個(gè)需要大量計(jì)算的結(jié)果,但是并沒有計(jì)算結(jié)束時(shí),可以返回這個(gè),這時(shí)候客戶端可以通過輪詢等機(jī)制繼續(xù)請(qǐng)求。
203請(qǐng)求的代理服務(wù)器修改了源服務(wù)器返回的 200 中的內(nèi)容,一般用不到。比如說,我們通過代理服務(wù)器向服務(wù)器 A 請(qǐng)求用戶信息,服務(wù)器 A 正常響應(yīng),但代理服務(wù)器命中了緩存并返回了自己的緩存內(nèi)容,這時(shí)候它返回 203 告訴我們這部分信息不一定是最新的,我們可以自行判斷并處理。
204請(qǐng)求正確,但是沒有需要返回的內(nèi)容。比如說,我們請(qǐng)求刪除某個(gè)用戶,刪除成功可以返回 204。205類似 204,但是要求請(qǐng)求者重置視圖,一般也用不到。比如說,我們請(qǐng)求刪除某個(gè)用戶,服務(wù)器返回 205 的話,我們就刷新現(xiàn)在的用戶列表。
206請(qǐng)求成功,但根據(jù)請(qǐng)求頭只返回了部分內(nèi)容。比如說,我們下載一部片,共有 10 部分,我們把請(qǐng)求也分成了 10 次(防止一次請(qǐng)求過大),這時(shí)候服務(wù)器就可以返回 206 并在其頭部告訴我們這是哪一部分,然后再根據(jù)這個(gè)信息進(jìn)行拼裝。
300請(qǐng)求成功,但結(jié)果有多種選擇。比如說,我們下載一部片,服務(wù)器有 avi、mp4 等格式,這時(shí)候可以返回 300,并在 body 里告知有哪些格式,然后用戶可以根據(jù)這些格式再次請(qǐng)求。
301請(qǐng)求成功,但是資源被永久轉(zhuǎn)移。比如說,我們要下載葫蘆娃,但是由于舊的存儲(chǔ)服務(wù)商漲價(jià)了,現(xiàn)在要使用新的存儲(chǔ)服務(wù)了,要去新地址下載,這時(shí)候可以返回 301,并在 header 的 Location 中告知新的地址,以后也應(yīng)當(dāng)?shù)竭@個(gè)地址下載。
302請(qǐng)求成功,但是資源被臨時(shí)轉(zhuǎn)移了。和 301 不同的是,除非是 HEAD 請(qǐng)求,否則新地址的信息應(yīng)當(dāng)在 body 中返回,并且資源只是臨時(shí)轉(zhuǎn)移,以后不應(yīng)當(dāng)通過新地址來下載。303類似 302,但要求使用 GET 來訪問新的地址來獲取資源。
304請(qǐng)求的資源并沒有被修改過。比如說,我們發(fā)送請(qǐng)求想看看 5.20 后的情侶信息,服務(wù)器查詢沒有新的情侶信息產(chǎn)生,這時(shí)候可以返回 304,然后客戶端可以繼續(xù)用舊的數(shù)據(jù)。
305請(qǐng)求的資源必須通過代理訪問。比如說,我們想請(qǐng)求服務(wù)器 A 上新的 iPhone 的信息,但是需要通過代理服務(wù)器才能訪問,如果直接請(qǐng)求了服務(wù)器 A,沒有經(jīng)過代理服務(wù)器,這時(shí)候服務(wù)器 A 就可以返回 305 從而告訴我們應(yīng)當(dāng)訪問代理服務(wù)器。306不用了。307類似 302,但要求使用原有的請(qǐng)求方式來通過新地址獲取資源。308類似 301,但要求使用原有的請(qǐng)求方式來通過新地址獲取資源。// 分割線
400請(qǐng)求出現(xiàn)錯(cuò)誤,比如請(qǐng)求頭不對(duì)等,所有不想明確區(qū)分的客戶端請(qǐng)求出錯(cuò)都可以返回 400。401沒有提供認(rèn)證信息。比如說,請(qǐng)求的時(shí)候沒有帶上 Token 等。
402為將來的需要所保留的狀態(tài)碼。403請(qǐng)求的資源不允許訪問。比如說,你使用普通用戶的 Token 去請(qǐng)求管理員才能訪問的資源。
404請(qǐng)求的內(nèi)容不存在。
405請(qǐng)求的方法不允許使用。比如說,服務(wù)器只實(shí)現(xiàn)了 PATCH 了局部更新資源,并沒有實(shí)現(xiàn) PUT 來替換資源,而我們使用了 PUT,這時(shí)候服務(wù)器可以返回 405 來告知并沒有實(shí)現(xiàn)對(duì) PUT 的相關(guān)處理。406請(qǐng)求的資源并不符合要求。比如說,我們 header 里請(qǐng)求 JSON 格式的數(shù)據(jù),但是服務(wù)器只有 XML 格式的數(shù)據(jù),這時(shí)候可以返回 406 告知。407類似 401,但是要求必須去同代理服務(wù)器進(jìn)行認(rèn)證。
408客戶端請(qǐng)求超時(shí)。我們想 POST 創(chuàng)建一個(gè)用戶,雖然建立了連接,但是網(wǎng)絡(luò)不好,服務(wù)器在規(guī)定時(shí)間內(nèi)沒有得到我們的請(qǐng)求信息,這時(shí)候服務(wù)器可以返回 408 告訴我們超時(shí)了。然后我們可以重新發(fā)送請(qǐng)求。409請(qǐng)求沖突。比如說,服務(wù)器要求不同用戶不能重名,服務(wù)器已經(jīng)有了一個(gè)名叫小偉的用戶,這時(shí)候我們又想創(chuàng)建一個(gè)名叫小偉的用戶,服務(wù)器可以返回 409,告訴我們沖突了,也可以在 body 中明確告知是什么沖突了。410請(qǐng)求資源曾經(jīng)存在,但現(xiàn)在不存在了。比如說,我們下載葫蘆娃,但是因?yàn)榘鏅?quán)被刪了,下載不了了,這時(shí)候服務(wù)器返回 410,告訴我們洗洗早點(diǎn)睡。411沒有提供請(qǐng)求資源的長(zhǎng)度。比如說,我們下載葫蘆娃,服務(wù)器只允許我們分部分下載,我們?nèi)绻桓嬖V服務(wù)器我們要下載哪部分,服務(wù)器就返回 411 警告我們。412請(qǐng)求的資源不符合請(qǐng)求頭中的 IF-* 的某些條件。比如說,我們下載葫蘆娃,然后在請(qǐng)求頭告知服務(wù)器要 5.20 后更新過的,服務(wù)器沒有,于是返回了 412。413請(qǐng)求體過大。比如說,服務(wù)器要求上傳文件不能超過 5M,但是我們 POST 了 10M,這時(shí)候就返回 413。
414請(qǐng)求的 URI 太長(zhǎng)了。比如說,我們提供了太多的 Query 參數(shù),以至于超過了服務(wù)器的限制,這時(shí)候可以返回 414。415不支持的媒體類型。比如說,我們上傳了一張七娃的 GIF 動(dòng)圖,而服務(wù)器只允許你上傳 PNG 圖片,這時(shí)候就返回 415。416請(qǐng)求的區(qū)間無效。比如說,我們分部分下載時(shí)請(qǐng)求葫蘆娃的 10 分鐘到 12 分鐘的內(nèi)容,但是這部葫蘆娃只有 1 分鐘的內(nèi)容,這時(shí)候就返回 416。417預(yù)期錯(cuò)誤。指服務(wù)器沒法滿足我們?cè)谡?qǐng)求頭里的 Expect 相關(guān)的信息。418我是個(gè)茶壺。這是一個(gè)愚人節(jié)的玩笑,這個(gè)狀態(tài)碼就是用來搞笑的。// 分割線
500服務(wù)器錯(cuò)誤。沒法明確定義的服務(wù)器錯(cuò)誤都可以返回這個(gè)。501請(qǐng)求還沒有被實(shí)現(xiàn)。比如說,我們請(qǐng)求一個(gè)接口來自動(dòng)拒絕項(xiàng)目經(jīng)理的要求,但是這個(gè)接口只是美好的想象,并沒有被實(shí)現(xiàn),這時(shí)候可以返回 501。502網(wǎng)關(guān)錯(cuò)誤。比如說,我們向服務(wù)器 A 請(qǐng)求下載葫蘆娃,但是 A 其實(shí)只是一個(gè)代理服務(wù)器,他得向 B 請(qǐng)求葫蘆娃,但是不知道為啥 B 不理他或者給他錯(cuò)誤,這時(shí)候哦可以 A 返回 502 用來表示 B 這家伙傲嬌了。503服務(wù)暫時(shí)不可用。比如說,服務(wù)器正好在更新代碼重啟。504類似 502,但是這時(shí)候是 B 不理 A,超時(shí)了 。505請(qǐng)求的 HTTP 版本不支持。比如說,現(xiàn)在強(qiáng)行根據(jù) HTTP 1000 來請(qǐng)求。