前言
404 — 對於普通人來講,它是「四百零四」,是一個用十進制表示的數字,但對於開發者,尤爲是web相關的開發者來講,它指相關資源沒找到,表示了一種「不存在」的意思,若是我要隱含的表示個人某個東西不見了,我能夠說「個人東西404了」(它的設計哲學中隱藏着加密學和壓縮學)。在HTTP架構體系中,狀態碼是很重要的一環,它用各類協商好的數字字符來指代客戶端和服務端在通訊時遇到的各類狀況,在先後端分離的當前環境下,先後端處於分離狀態,瞭解各狀態碼的指代含義對於加快開發進度和調試進度意義重大。html
各狀態碼解列
1、1xx:信息響應( Informational response)
簡介:表示響應已被服務端接收、理解,但還需作進一步處理,該類型狀態碼每每是臨時性的,由於立刻將會變爲如下狀態之一:成功(2xx)、重定向(3xx)、異常或錯誤(4xx或5xx)web
2、2XX:請求成功(Success)
簡介:表示客戶端發送的請求已成功被服務端接收、理解、接受後端
- 200 成功(ok):標準的HTTP請求響應成功狀態碼,get請求中,響應將包含與請求對應的實體,post請求中,響應將包含實體的描述或實體的操做結果。
- 202 已接受請求(Accepted):服務端接受了請求,但還沒處理,最終可能會成功、或不會被執行或禁止執行
- 204 無內容(No Content):服務端成功處理了請求,但沒返回任何內容
- 205 重置內容(Reset Content):服務端成功處理了請求,但沒返回任何內容,區別於204的是:該響應要求客戶端重置文檔視圖。
- 206 部份內容(Partial Content):服務端成功處理了請求的部份內容,該狀態碼通常用於HTTP下載工具的斷點續傳功能或多個下載的分段進行(如迅雷下載)
3、3XX:重定向(Redirection)
簡介:表示客戶端須要採起進一步的操做才能完成請求,該狀態碼經常使用於URL重定向,後續的請求地址在本次響應的Location域中指明緩存
- 301 永久移動(Moved Permanently):被請求資源已被永久的轉移到新位置,而且未來對此資源的引用都應該使用它返回的URI之一,新的永久性URI將在Location域中返回。永遠也別來煩我,去找張三吧。
- 302 臨時移動(Found,原始短語爲Moved Temporarily):因爲移動式臨時的,客戶端之後仍是用原來的地址發送請求,新的臨時URI將在Location域中返回
- 303 看其它(See Other):請求的地址已經被移動,請求的對應地址能夠在另外一個URI上被找到
- 304 未修改(Not Modified):表示當前資源的版本在根據請求頭的If-Modified-Since和If-None-Match參數判斷緩存後,資源不曾被修改,這樣客戶端不須要從新傳新資源,客戶端仍然使用上次下載的資源復件。
4、4XX:客戶端錯誤(Client errors),
簡介:表示錯誤狀況多是由客戶端致使的,除非是一個HEAD請求,不然服務器應該把錯誤請求的詳細解釋實體拋出來闡述錯誤狀況,這個錯誤信息應該告訴是臨時的仍是永久情況,該狀態碼適用於任何請求方法。客戶端應該儘量把錯誤實體展現給用戶。服務器
- 400 錯誤請求(Bad Request):明顯的客戶端錯誤請求(如:語法缺陷,請求包過大、無效的請求消息片斷、欺詐性請求路由)
- 401 未受權(Unauthorized):相似於403 Forbidden錯誤,但不一樣的是該錯誤是指在特定的認證狀況下,用戶未能經過認證(如:登錄認證)
- 403 已拒絕(Forbidden):該請求已被服務器驗證爲有效,可是服務器拒絕了它的操做,通常是由於用戶沒有取得對應資源的使用權。
- 404 未找到(Not Found)
- 405 方法不被容許(Method Not Allowed):該請求方法不支持對需請求資源的訪問。如:明明是須要post方法的,你卻給我傳了個get方法
- 406 請求沒法接受(Not Acceptable):請求資源的內容格式沒法知足請求頭中的要求,於是沒法生成響應體,故沒法接受,請求的格式由Content-type頭重定義的媒體類型決定
- 408 請求超時(Request Timeout):客戶端沒有在服務器預備等待的時間內完成一個請求的發送,客戶端能夠隨時再次提交這一請求而無需進行任何更改。
- 409 衝突(Confict):由於請求存在衝突沒法處理,好比多人在線編輯工具出現的衝突
5、5XX:服務器錯誤(Server errors)
簡介:表示服務端沒法完成請求,該狀態表示服務端在處理請求的過程當中發生了錯誤或異常架構
- 500 內部服務錯誤(Internal Server Error):通用錯誤消息,服務端遇到了一個不曾預料的狀況(如:服務端可能沒有使用try catch等錯誤處理機制來抓到並處理錯誤異常),沒法給出更具體的錯誤消息來解釋 —— 個人錯,但我不知道我錯哪了
- 501 請求沒法實現(Not implemented):服務端不支持當前請求中所需的某個功能—— 臣妾作不到啊!
- 502 損壞的網關(Bad Gateway):做爲網關或代理工做的服務端嘗試執行請求時,從上游服務器接收到無效的響應。
- 503 服務不可用(Service Unavailable):因爲臨時的請求過載,致使服務端沒法處理請求,該情況只是暫時的,而且會在一段時間後恢復,若是能預計延遲時間,那麼響應中包含一個Retry-After頭來標明延遲時間
附加知識點:
- Head方法:它與get方法幾乎同樣,但該方法只請求資源的頭部信息(頭部信息和get方法的頭部信息同樣),不會請求響應實體部分(即便包含了也會被忽略),由於head方法的該特性,咱們能夠利用它測試、獲取到對應資源的相關「摘要信息」,來決定採起的步驟,一個使用場景是在下載一個大文件時先獲取其大小,再考慮是否下載它。—— 它是一個觸手試探器,就像一個偵察兵同樣
後記
就我我的的理解,對於大部分開發者來講,瞭解經常使用的狀態碼,有一個狀態碼的框架圖足以,若是發現了錯誤本身不清楚的上wiki或w3c找便可,不須要死記硬背,但它仍是很重要的,因此須要在平常開發中多多關注一些狀態碼指代的隱含意思,就像你不知道「2333」這個詞語沒法混二次元圈子同樣,瞭解狀態碼也是一種混圈子的基礎裝逼屬性。框架
參考