在網絡應用開發蓬勃發展的今天,TCP/IP協議族已經成了網絡應用開發不可或缺的一部分,而應用層的HTTP協議更是無法繞開,如果一個程序員連HTTP狀態碼都不知道是什麼的話,十有八九是要遭人白眼的。
在工作中遇到有些同學對HTTP協議概念理解不清或者不知道該怎麼使用HTTP狀態碼,甚至有人誤以爲“我向Server發送一個HTTP Request,只要能收到一個HTTP Response就說明我代碼寫對了”,殊不知HTTP Response就是通過不同的StatusCode來區分的。就好比我們去商店買飲料,我們問店員“請給我一瓶飲料”,期望的回答當然是“你好,這是您的飲料”,但事實上的回答回答可能有:“對不起,你要的飲料已經買完了”–404、“對不起,這個飲料只供給會員”–401、“對不起,請您排隊稍等”–202、“Can you speak English?”(外國商店,你得說外文)–101…
所以瞭解HTTP狀態碼的用途可以更有針對性的對業務進行處理,今天就來回顧下那些常用的HTTP Status Code
1xx
1xx 狀態碼一般是一個請求的中間狀態,一般是信息提示,請求協商
狀態碼編號 | 狀態碼標識 | 說明 |
---|---|---|
100 | Continue | 請求未結束,應該繼續請求 |
101 | Switching Protocol | 協議轉換,在使用 Web Socket 的時候就會遇到,下面是一個示例,響應會有一個 Connection:Upgrade 的請求頭, Upgrade 會指定要使用的協議名稱 |
2xx
2xx 一般表示請求處理成功
200 OK,請求處理成功
狀態碼編號 | 狀態碼標識 | 說明 |
---|---|---|
201 | Created | 請求處理成功,並且新資源已經創建 |
202 | Accepted | 請求已經接受,正在處理,尚未處理完成 |
204 | No Content | 響應內容爲空,在 asp.net core 中返回一個 Json(null) 的時候就會是一個 NoContent 的結果 |
3xx
3xx 一般表示重定向
狀態碼編號 | 狀態碼標識 | 說明 |
---|---|---|
301 | Moved Permanently | 永久重定向 |
302 | Found | 臨時重定向 |
304 | Not Modified | 資源未發生修改,可以直接使用瀏覽器本地緩存 |
307 | Temporary Redirect | 臨時重定向請求 |
308 | Permanent Redirect | 永久重定向請求 |
注意:
- 301、302 只支持 GET 請求,如果是 POST 請求,重定向後會使用 GET 請求且 Body 數據會丟失
- 307、308 支持 POST 請求,在 POST 重定向的時候會帶上原來請求的 body 再請求新的地址,body 數據不會丟失
- 302、307 是臨時重定向
- 301、308 是永久重定向,是允許緩存的,瀏覽器可以緩存
4xx
4xx 一般表示客戶端請求錯誤
狀態碼編號 | 狀態碼標識 | 說明 |
---|---|---|
400 | BadRequest | 錯誤請求,一般用來表示請求參數異常,比如請求的某一個參數不能爲空,但實際請求是空 |
401 | Unauthorized | 未授權,資源需要授權或登錄,而用戶沒有登錄或者沒有提供訪問所需的 Token 等 |
403 | Forbidden | 禁止訪問,當前用戶沒有權限訪問資源,如需要Admin角色的用戶,但是請求的用戶沒有這個角色 |
404 | NotFound | 未找到資源,資源不存在 |
405 | Method Not Allowed | 不允許的方法調用,資源不支持的請求方法,比如資源只允許 GET 請求,但是實際請求使用了 POST 或 DELETE 方法 |
406 | Not Acceptable | 請求的資源客戶端不支持處理,比如客戶端希望獲取 xml 的響應,但是服務器端只支持 JSON 響應 |
408 | Request Timeout | 請求處理超時 |
409 | Conflict | 請求資源衝突,常發生在 PUT 更新資源信息時發生,比如更新時指定資源的 ETAG,但是PUT請求時,資源的 ETAG 已經發生變化 |
410 | Gone | 請求資源在源服務器上不再可用 |
411 | Length Required | 請求需要攜帶 Content-Length 請求頭 |
412 | Precondition Failed | 請求預檢失敗,請求的某些參數不符合條件 |
413 | Payload Too Large | 請求的參數太大,請求的 body 過大,服務器拒絕處理 |
414 | URI Too Long | 請求的 URI 地址太長,服務器拒絕處理 |
415 | Unsupported Media Type | 不支持的媒體類型或不支持的編碼,比如服務器只支持處理 JSON 請求,但是請求是 xml 格式 |
5xx
5xx 一般表示服務端錯誤
狀態碼編號 | 狀態碼標識 | 說明 |
---|---|---|
500 | Internal Server Error | 服務器內部錯誤 |
501 | Not Implemented | 服務器不支持需要處理請求的功能,比如圖片壓縮等處理 |
502 | Bad Gateway | 反向代理或網關找不到處理請求的服務器 |
503 | Service Unavailable | 服務不可用 |
504 | Gateway Timeout | 網關超時 |
505 | HTTP Version Not Supported | 不支持的 HTTP 版本,服務器不支持或拒絕處理這個 HTTP 版本的請求 |