HTTP 中的常用狀態(tài)碼及使用場景
大家好,我是前端西瓜哥。今天我們來學(xué)習(xí) HTTP 中的常用狀態(tài)碼及使用場景。
作為前端,經(jīng)常需要從后端獲取數(shù)據(jù),所以對 HTTP 的掌握也是很重要的。
其中 HTTP 狀態(tài)碼則代表了當(dāng)前請求的狀態(tài),比如客戶端還是服務(wù)端錯誤之類的,也是考的比較多的點。
1xx 消息
這類狀態(tài)碼,代表請求已被服務(wù)端接受,但服務(wù)端還要繼續(xù)進(jìn)行處理。
100 Continue
繼續(xù)。
服務(wù)端收到請求,并表示可以繼續(xù)。在客戶端準(zhǔn)備推送較大的數(shù)據(jù)時,可以用 100 表示允許。
101 Switching Protocols
切換協(xié)議。
比較常見的是響應(yīng) WebSockets 連接,瀏覽器會先發(fā)送 HTTP 請求,在請求頭里帶上希望升級為 WebSockets 協(xié)議的相關(guān)信息。
服務(wù)端收到后,如果支持 WebSockets,就會返回這個狀態(tài)碼 101,進(jìn)行 HTTP 到 WebSockets 的協(xié)議切換。
2xx 成功
這類狀態(tài)碼代表服務(wù)已被正常處理。
200 OK
成功。
200 是用得最多的狀態(tài)碼,前端請求接口,數(shù)據(jù)正常返回,就會拿到這個狀態(tài)碼。這是大家最喜歡看到的狀態(tài)碼。
3xx 重定向
代表客戶端需要進(jìn)行進(jìn)一步操作才能完成請求。
301 Moved Permanently
永久重定向。
請求的資源被永久移動到其他位置。
假如我們的一篇博客的 url 地址發(fā)生了永久的改變,但用戶收藏夾里的鏈接還是舊的,我們就可以在用戶請求舊鏈接時,返回 301 狀態(tài)碼,并賦上一個重定向地址。
HTTP/1.1 301 Moved PermanentlyLocation: http://www.example.org/index.asp
這樣用戶就能跳到正確的新地址中。
這新的重定向地址會被瀏覽器緩存,下次用戶訪問舊鏈接時,就不會發(fā)請求拿到 301,而是直接就跳到重定向地址了。
所以設(shè)置重定向地址時要小心點,別搞錯了。
還有一個常用用途是 HTTP 鏈接跳轉(zhuǎn)到 HTTPS 鏈接。
比如我們訪問 http://zhihu.com/,就會跳轉(zhuǎn)到 https://www.zhihu.com/。
302 Found
臨時重定向。
原始描述短語為 Moved Temporarily。
適合一些臨時的重定向操作,比如因為服務(wù)器崩潰導(dǎo)致一些頁面無法提供正確的訪問,在修復(fù)期間,則可以通過 302 先暫時地重定向到一個新的地址。修復(fù)完后再讓用戶繼續(xù)訪問原鏈接。
302 不會持久緩存,但可以設(shè)置緩存時間持續(xù)一段時間。
HTTP/1.1 302 FoundLocation: https://www-temp.example.org/Cache-control: private; max-age=600
304 Not Modified
沒有改變。
304 指的是資源相比上次沒有發(fā)生變化,客戶端可以繼續(xù)使用之前緩存的資源,以減輕瀏覽器負(fù)擔(dān)。
這里涉及到了 HTTP 緩存中的強(qiáng)緩存和協(xié)商緩存知識。協(xié)商緩存中會用到 304 狀態(tài)碼。
具體可以看我之前寫的一篇文章:《HTTP 緩存策略:強(qiáng)緩存和協(xié)商緩存》
4xx 客戶端錯誤
客戶端的問題。
400 Bad Request
不好的請求。
通用的客戶端錯誤,表示問題是出在客戶端身上的。比如傳的參數(shù)不對。
在前端和后端對接接口時,比較常看到這個錯誤,因為容易寫錯參數(shù)名,或者后端新增或修改了參數(shù)。
404 Not Found
不存在。
廣為人知的狀態(tài)碼,代表 url 對應(yīng)資源不存在。
比如一些文章被刪除,是直接在數(shù)據(jù)庫中進(jìn)行不可逆地徹底刪除的。然后就導(dǎo)致用戶訪問這個頁面時,服務(wù)器找不到對應(yīng)數(shù)據(jù),然后就返回一個 404,并提示 “頁面不存在”。
405 Method Not Allowed
方法不被允許。
請求方法沒用對,比如一個請求應(yīng)該用 POST,你卻用了 GET 請求,就會得到 405。
拿到 405 通常說明你的 url 沒錯,錯的是方法。如果 url 也不對,你拿到的將是 404。
5xx服務(wù)器錯誤
服務(wù)端的問題,快去找后端,別老抓著前端一頓問。
500 Internal Server Error
內(nèi)部服務(wù)錯誤。
后端服務(wù)器的代碼出了 bug,比如讀取了一個 null 的屬性,就會導(dǎo)致服務(wù)無法正常運行下去,然后后端就會捕獲(catch)這個錯誤,返回 500,告知是后端服務(wù)器出了問題。
嚴(yán)重的情況下,后端服務(wù)直接崩潰。
502 Bad Gateway
網(wǎng)關(guān)錯誤。
比如后端服務(wù)崩潰,但中間的一些代理服務(wù)器 Web Server(比如 Ngnix)還能正確運行。但因為無法訪問到后端服務(wù),所以就會返回一個 502。
504 Gateway Timout
網(wǎng)關(guān)超時。
網(wǎng)關(guān)還在,但后端服務(wù)因為各種原因(比如因為一個死循環(huán)卡死了),導(dǎo)致一直沒有響應(yīng)回來,在過了一段時間后網(wǎng)關(guān)了依舊沒能收到消息,就會給客戶端返回 504 網(wǎng)關(guān)超時。
結(jié)尾
常見的 HTTP 狀態(tài)碼大概就是這些。