你需要了解的 HTTP Status Code
阿新 • • 發佈:2020-03-30
# 你需要了解的 HTTP Status Code
## Intro
現在前後端分離的開發模式越來越流行,後端負責開發對應的 API,前端只需要
關注前端頁面的資料展示和前端邏輯即可。
對於前後端分離這種開發模式,我個人還是比較喜歡的,因為這樣可以讓更專業的人做更專業的事情,後端專注於做 API 的開發設計,前端專注於資料的展示,頁面的樣式。
這樣前後端需要就某些資訊達成一些共識,比如說常用的 HTTP 方法, 常用的 HTTP 狀態碼等
HTTP Method 較為簡單,我們常用的習慣如下:
一般查詢我們都會使用 GET 方法,
建立新的記錄使用 POST 方法
更新已有資料使用 PUT 方法
更新已有資料部分屬性使用 PATCH 方法
刪除已有資料使用 DELETE 方法
下面來詳細介紹一下常用的 HTTP 狀態碼
## 1xx
1xx 狀態碼一般是一個請求的中間狀態,一般是資訊提示,請求協商
**100** Continue,請求未結束,應該繼續請求
**101** Switching Protocol,協議轉換,在使用 Web Socket 的時候就會遇到,下面是一個示例,響應會有一個 `Connection: Upgrade` 的請求頭,`Upgrade` 會指定要使用的協議名稱
![websocket demo](https://upload-images.jianshu.io/upload_images/2432073-25bd08db96043bf6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 2xx
2xx 一般表示請求處理成功
**200** OK,請求處理成功
**201** Created,請求處理成功,並且新資源已經建立
**202** Accepted,請求已經接受,正在處理,尚未處理完成
**204** No Content,響應內容為空,在 asp.net core 中返回一個 `Json(null)` 的時候就會是一個 NoContent 的結果
## 3xx
3xx 一般表示重定向
**301** Moved Permanently 永久重定向
**302** Found 臨時重定向
**307** Temporary Redirect 臨時重定向請求
**308** Permanent Redirect 永久重定向請求
這幾個重定向的區別:
301、302 只支援 GET 請求,如果是 POST 請求,重定向後會使用 GET 請求且 Body 資料會丟失
307、308 支援 POST 請求,在 POST 重定向的時候會帶上原來請求的 body 再請求新的地址,body 資料不會丟失
302、307 是臨時重定向,
301、308 是永久重定向,是允許快取的,瀏覽器可以快取
**304** Not Modified,資源未發生修改,可以直接使用瀏覽器本地快取
> This is the response code to an If-Modified-Since or If-None-Match header, where the URL has not been modified since the specified date.
## 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,請求預檢失敗,請求的某些引數不符合條件
> The pre condition given in the request evaluated to false by the server.
**413** Payload Too Large,請求的引數太大,請求的 body 過大,伺服器拒絕處理
**414** URI Too Long,請求的 URI 地址太長,伺服器拒絕處理
**415** Unsupported Media Type,不支援的媒體型別或不支援的編碼,比如伺服器只支援處理 JSON 請求,但是請求是 xml 格式
> The 415 (Unsupported Media Type) status code indicates that the
origin server is refusing to service the request because the payload
is in a format not supported by this method on the target resource.
The format problem might be due to the request's indicated
Content-Type or Content-Encoding, or as a result of inspecting the
data directly.
## 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 版本的請求
## Reference
- [https://www.tutorialspoint.com/http/http_status_codes.htm](https://www.tutorialspoint.com/http/http_status_codes.htm)
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Status](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)
- [https://tools.ietf.org/html/rfc7231#section-6.2](https://tools.ietf.org/html/rfc7231#secti