1. 程式人生 > >你需要了解的 HTTP Status Code

你需要了解的 HTTP Status Code

# 你需要了解的 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