關於 RESTful API 中 HTTP 狀態碼的定義

最近正好使用了一下子 Koa ,在這說一下本身對各個 請求碼的看法和使用場景,懶人直接看 200、400、40一、40三、40四、500 就能夠了。 
其中 2XX/3XX 其實都是請求成功,可是結果不一樣。4XX 是請求出錯,5XX 是服務器處理出現錯誤。html

200

這個最容易理解,就是正確的請求返回正確的結果,若是不想細分正確的請求結果均可以直接返回200。緩存

201

表示資源被正確的建立。好比說,咱們 POST 用戶名、密碼正確建立了一個用戶就能夠返回 201。服務器

202

請求是正確的,可是結果正在處理中,無法返回對應的結果。好比說,咱們請求一個須要大量計算的結果,可是並無計算結束時,能夠返回這個,這時候客戶端能夠經過輪詢等機制繼續請求。markdown

203

請求的代理服務器修改了源服務器返回的 200 中的內容,通常用不到。好比說,咱們經過代理服務器向服務器 A 請求用戶信息,服務器 A 正常響應,但代理服務器命中了緩存並返回了本身的緩存內容,這時候它返回 203 告訴咱們這部分信息不必定是最新的,咱們能夠自行判斷並處理。網絡

204

請求正確,可是沒有須要返回的內容。好比說,咱們請求刪除某個用戶,刪除成功能夠返回 204。ide

205

相似 204,可是要求請求者重置視圖,通常也用不到。好比說,咱們請求刪除某個用戶,服務器返回 205 的話,咱們就刷新如今的用戶列表。post

206

請求成功,但根據請求頭只返回了部份內容。好比說,咱們下載一部片,共有 10 部分,咱們把請求也分紅了 10 次(防止一次請求過大),這時候服務器就能夠返回 206 並在其頭部告訴咱們這是哪一部分,而後再根據這個信息進行拼裝。atom

300

請求成功,但結果有多種選擇。好比說,咱們下載一部片,服務器有 avi、mp4 等格式,這時候能夠返回 300,並在 body 裏告知有哪些格式,而後用戶能夠根據這些格式再次請求。.net

301

請求成功,可是資源被永久轉移。好比說,咱們要下載葫蘆娃,可是因爲舊的存儲服務商漲價了,如今要使用新的存儲服務了,要去新地址下載,這時候能夠返回 301,並在 header 的 Location 中告知新的地址,之後也應當到這個地址下載。代理

302

請求成功,可是資源被臨時轉移了。和 301 不一樣的是,除非是 HEAD 請求,不然新地址的信息應當在 body 中返回,而且資源只是臨時轉移,之後不該當經過新地址來下載。

303

相似 302,但要求使用 GET 來訪問新的地址來獲取資源。

304

請求的資源並無被修改過。好比說,咱們發送請求想看看 5.20 後的情侶信息,服務器查詢沒有新的情侶信息產生,這時候能夠返回 304,而後客戶端能夠繼續用舊的數據。

305

請求的資源必須經過代理訪問。好比說,咱們想請求服務器 A 上新的 iPhone 的信息,可是須要經過代理服務器才能訪問,若是直接請求了服務器 A,沒有通過代理服務器,這時候服務器 A 就能夠返回 305 從而告訴咱們應當訪問代理服務器。

306

不用了。

307

相似 302,但要求使用原有的請求方式來經過新地址獲取資源。

308

相似 301,但要求使用原有的請求方式來經過新地址獲取資源。

400

請求出現錯誤,好比請求頭不對等,全部不想明確區分的客戶端請求出錯均可以返回 400。

401

沒有提供認證信息。好比說,請求的時候沒有帶上 Token 等。

402

爲未來的須要所保留的狀態碼。

403

請求的資源不容許訪問。好比說,你使用普通用戶的 Token 去請求管理員才能訪問的資源。

404

請求的內容不存在。

405

請求的方法不容許使用。好比說,服務器只實現了 PATCH 了局部更新資源,並無實現 PUT 來替換資源,而咱們使用了 PUT,這時候服務器能夠返回 405 來告知並無實現對 PUT 的相關處理。

406

請求的資源並不符合要求。好比說,咱們 header 裏請求 JSON 格式的數據,可是服務器只有 XML 格式的數據,這時候能夠返回 406 告知。

407

相似 401,可是要求必須去同代理服務器進行認證。

408

客戶端請求超時。咱們想 POST 建立一個用戶,雖然創建了鏈接,可是網絡很差,服務器在規定時間內沒有獲得咱們的請求信息,這時候服務器能夠返回 408 告訴咱們超時了。而後咱們能夠從新發送請求。

409

請求衝突。好比說,服務器要求不一樣用戶不能重名,服務器已經有了一個名叫小偉的用戶,這時候咱們又想建立一個名叫小偉的用戶,服務器能夠返回 409,告訴咱們衝突了,也能夠在 body 中明確告知是什麼衝突了。

410

請求資源曾經存在,但如今不存在了。好比說,咱們下載葫蘆娃,可是由於版權被刪了,下載不了了,這時候服務器返回 410,告訴咱們洗洗早點睡。

411

沒有提供請求資源的長度。好比說,咱們下載葫蘆娃,服務器只容許咱們分部分下載,咱們若是不告訴服務器咱們要下載哪部分,服務器就返回 411 警告咱們。

412

請求的資源不符合請求頭中的 IF-* 的某些條件。好比說,咱們下載葫蘆娃,而後在請求頭告知服務器要 5.20 後更新過的,服務器沒有,因而返回了 412。

413

請求體過大。好比說,服務器要求上傳文件不能超過 5M,可是咱們 POST 了 10M,這時候就返回 413。

414

請求的 URI 太長了。好比說,咱們提供了太多的 Query 參數,以致於超過了服務器的限制,這時候能夠返回 414。

415

不支持的媒體類型。好比說,咱們上傳了一張七娃的 GIF 動圖,而服務器只容許你上傳 PNG 圖片,這時候就返回 415。

416

請求的區間無效。好比說,咱們分部分下載時請求葫蘆娃的 10 分鐘到 12 分鐘的內容,可是這部葫蘆娃只有 1 分鐘的內容,這時候就返回 416。

417

預期錯誤。指服務器無法知足咱們在請求頭裏的 Expect 相關的信息。

418

我是個茶壺。這是一個愚人節的玩笑,這個狀態碼就是用來搞笑的。

500

服務器錯誤。無法明肯定義的服務器錯誤均可以返回這個。

501

請求尚未被實現。好比說,咱們請求一個接口來自動拒絕項目經理的要求,可是這個接口只是美好的想象,並無被實現,這時候能夠返回 501。

502

網關錯誤。好比說,咱們向服務器 A 請求下載葫蘆娃,可是 A 其實只是一個代理服務器,他得向 B 請求葫蘆娃,可是不知道爲啥 B 不理他或者給他錯誤,這時候哦能夠 A 返回 502 用來表示 B 這傢伙傲嬌了。

503

服務暫時不可用。好比說,服務器正好在更新代碼重啓。

504

相似 502,可是這時候是 B 不理 A,超時了 。

505

請求的 HTTP 版本不支持。好比說,如今強行根據 HTTP 1000 來請求。

連接:https://www.zhihu.com/question/58686782/answer/159603453 
來源:知乎 
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

參考連接 
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#cite_note-15 
http://racksburg.com/choosing-an-http-status-code/(感謝 @餘博倫 大佬的答案)

相關文章
相關標籤/搜索