http響應(yīng)狀態(tài)碼該怎么用?



點擊上方藍色“邁莫coding”,選擇“設(shè)為星標”
前兩講我們分別聊了http的含義及其http報文那些事兒,知道了作為客戶端如何將數(shù)據(jù)發(fā)送給服務(wù)端,知道了請求報文的字段屬性含義。
如果對http報文不了解的話,推薦看一下我之前寫的文章......
計網(wǎng)以往文章
前言
客戶端和服務(wù)端進行數(shù)據(jù)交互時,當服務(wù)端收到客戶端傳輸過來的數(shù)據(jù),解析后進行處理,最終拼接成一個響應(yīng)報文傳輸給客戶端。
現(xiàn)在我們回顧一下響應(yīng)報文中響應(yīng)行的組成部分:

由圖可知,響應(yīng)行由三部分組成:
版本號:http協(xié)議版本號。
狀態(tài)碼:一個三位數(shù),用代碼的形式表示處理的結(jié)果,比如 200 是成功,500 是服務(wù)器錯誤。
原因:作為數(shù)字狀態(tài)碼補充,是更詳細的解釋文字,幫助人理解原因。
舉例說明一下響應(yīng)行:
HTTP/1.1 200 OK這表示:瀏覽器你好,我已經(jīng)處理完了你的請求,這個報文使用的協(xié)議版本號是 1.1,狀態(tài)碼是 200,一切OK?!?/span>
對于客戶端來說,響應(yīng)行中最有用的是狀態(tài)碼,客戶端可以通過不同的狀態(tài)碼進行不同的邏輯處理。它是一個十進制數(shù)字,以代碼的形式表示服務(wù)器對請求的處理結(jié)果,就像我們通常編寫程序時函數(shù)返回的錯誤碼一樣。
狀態(tài)碼
目前 RFC 標準里規(guī)定的狀態(tài)碼是三位數(shù),所以取值范圍就是從 000 到 999。
RFC 標準把狀態(tài)碼分成了五類,用數(shù)字的第一位表示分類,而 0~99 不用,這樣狀態(tài)碼的實際可用范圍就大大縮小了,由 000~999 變成了 100~599。
這五類的具體含義:
1×× : 請求處理中,請求已被接受,正在處理
2×× : 請求成功,請求被成功處理
3×× : 重定向,要完成請求必須進行進一步處理
4×× : 客戶端錯誤,請求不合法
5×× : 服務(wù)器端錯誤,服務(wù)器不能處理合法請求
客戶端作為請求方,會將數(shù)據(jù)傳輸給服務(wù)端,服務(wù)端解析完成后,會通過響應(yīng)報文方式傳輸給客戶端,客戶端獲取響應(yīng)報文后,通過響應(yīng)行中的狀態(tài)碼,開啟進一步的操作。通過狀態(tài)碼可以知道服務(wù)端是否處理成功失敗,是否需要重新發(fā)送......
狀態(tài)碼 1XX
1××類狀態(tài)碼屬于提示信息,是協(xié)議處理的中間狀態(tài),實際能夠用到的時候很少。
狀態(tài)碼 2XX
2XX 類狀態(tài)碼表示服務(wù)端已成功接收數(shù)據(jù)且處理完成,這也是客戶端想見到的狀態(tài)碼
200 OK
200 狀態(tài)碼表示一切正常,服務(wù)端如客戶端期望哪有返回響應(yīng)結(jié)果。
204 Not Content
204 狀態(tài)碼是另一個很常見的成功狀態(tài)碼,它的含義與“200 OK”基本相同,但響應(yīng)頭后沒有 body 數(shù)據(jù)。所以對于 Web 服務(wù)器來說,正確地區(qū)分 200 和 204是很必要的。
206 partial Content
206 partial Content 是HTTP 分塊下載或斷點續(xù)傳的基礎(chǔ),在客戶端發(fā)送“范圍請求”、要求獲取資源的部分數(shù)據(jù)時出現(xiàn),它與 200 一樣,也是服務(wù)器成功處理了請求,但 body 里的數(shù)據(jù)不是資源的全部,而是其中的一部分。
狀態(tài)碼 206 通常還會伴隨著頭字段“Content-Range”,表示響應(yīng)報文里 body 數(shù)據(jù)的具體范圍,供客戶端確認,例如“Content-Range: bytes 0-99/2000”,意思是此次獲取的是總計 2000 個字節(jié)的前 100 個字節(jié)。
狀態(tài)碼 3XX
3XX 狀態(tài)碼表示客戶端請求的資源發(fā)生了改動,需要使用新的URI來訪問資源。
301 Moved Permanently
301 Moved Permanently 被稱為“永久重定向”,也就是說請求資源已經(jīng)不存在,需要使用新的RUI訪問。
302 Found
302 Found 被稱為"臨時重定向",也就是說請求資源還在,暫時使用新的URI訪問。但后續(xù)仍然使用舊URI進行訪問。
狀態(tài)碼 4XX
狀態(tài)碼 4XX
4XX 狀態(tài)碼表示客戶端的錯誤,請求不合法。
400 Bad Request
400 Bad Request表示客戶端中有語法錯誤,不能被服務(wù)器理解。
403 Forbidden
403 Forbidden 表示服務(wù)端收到了客戶端的請求,但拒絕提供服務(wù)。原因可能多種多樣,例如信息敏感、法律禁止等。
404 Not Found
404 Not Found 可能是我們最常看見也是最不愿意看到的一個狀態(tài)碼,它的原意是資源在本服務(wù)器上未找到,所以無法提供給客戶端。
狀態(tài)碼 5XX
狀態(tài)碼 5XX
5××類狀態(tài)碼表示客戶端請求報文正確,但服務(wù)器在處理時內(nèi)部發(fā)生了錯誤,無法返回應(yīng)有的響應(yīng)數(shù)據(jù),是服務(wù)器端的“錯誤碼”。
500 Internal Server Error
500 Internal Server Error 與 400 類似,也是一個通用的錯誤碼,服務(wù)器究竟發(fā)生了什么錯誤我們是不知道的。不過對于服務(wù)器來說這應(yīng)該算是好事,通常不應(yīng)該把服務(wù)器內(nèi)部的詳細信息,例如出錯的函數(shù)調(diào)用棧告訴外界。雖然不利于調(diào)試,但能夠防止黑客的窺探或者分析
502 Bad Gateway
502 Bad Gateway 常是服務(wù)器作為網(wǎng)關(guān)或者代理時返回的錯誤碼,表示服務(wù)器自身工作正常,訪問后端服務(wù)器時發(fā)生了錯誤,但具體的錯誤原因也是不知道的
503 Server Unavailable
503 Server Unavailable 表示服務(wù)器當前很忙,暫時無法響應(yīng)服務(wù),我們上網(wǎng)時有時候遇到的“網(wǎng)絡(luò)服務(wù)正忙,請稍后重試”的提示信息就是狀態(tài)碼 503
小結(jié)
狀態(tài)碼是用來告知客戶端該請求是否處理成功
狀態(tài)碼是十進制的三位數(shù),分為五類,從 100 到 599
2××類狀態(tài)碼表示成功,常用的有 200、204、206
3××類狀態(tài)碼表示重定向,常用的有 301、302
.
4××類狀態(tài)碼表示客戶端錯誤,常用的有 400、403、404
5××類狀態(tài)碼表示服務(wù)器錯誤,常用的有 500、502、503
到這里,http響應(yīng)狀態(tài)碼就說到這里了。好了,我們下期再見~~~
分割線
往期推薦
文章也會持續(xù)更新,可以微信搜索「 邁莫coding 」第一時間閱讀。每天分享優(yōu)質(zhì)文章、大廠經(jīng)驗、大廠面經(jīng),助力面試,是每個程序員值得關(guān)注的平臺。

你點的每個贊,我都認真當成了喜歡
