大家好,我是前端西瓜哥。今天我們來(lái)學(xué)習(xí) HTTP 中的常用狀態(tài)碼及使用場(chǎng)景。
作為前端,經(jīng)常需要從后端獲取數(shù)據(jù),所以對(duì) HTTP 的掌握也是很重要的。
其中 HTTP 狀態(tài)碼則代表了當(dāng)前請(qǐng)求的狀態(tài),比如客戶端還是服務(wù)端錯(cuò)誤之類的,也是考的比較多的點(diǎn)。
(資料圖片)
這類狀態(tài)碼,代表請(qǐng)求已被服務(wù)端接受,但服務(wù)端還要繼續(xù)進(jìn)行處理。
100 Continue繼續(xù)。服務(wù)端收到請(qǐng)求,并表示可以繼續(xù)。在客戶端準(zhǔn)備推送較大的數(shù)據(jù)時(shí),可以用 100 表示允許。
101 Switching Protocols切換協(xié)議。比較常見的是響應(yīng) WebSockets 連接,瀏覽器會(huì)先發(fā)送 HTTP 請(qǐng)求,在請(qǐng)求頭里帶上希望升級(jí)為 WebSockets 協(xié)議的相關(guān)信息。
服務(wù)端收到后,如果支持 WebSockets,就會(huì)返回這個(gè)狀態(tài)碼 101,進(jìn)行 HTTP 到 WebSockets 的協(xié)議切換。
2xx 成功這類狀態(tài)碼代表服務(wù)已被正常處理。
200 OK成功。200 是用得最多的狀態(tài)碼,前端請(qǐng)求接口,數(shù)據(jù)正常返回,就會(huì)拿到這個(gè)狀態(tài)碼。這是大家最喜歡看到的狀態(tài)碼。
3xx 重定向代表客戶端需要進(jìn)行進(jìn)一步操作才能完成請(qǐng)求。
301 Moved Permanently永久重定向。請(qǐng)求的資源被永久移動(dòng)到其他位置。
假如我們的一篇博客的 url 地址發(fā)生了永久的改變,但用戶收藏夾里的鏈接還是舊的,我們就可以在用戶請(qǐng)求舊鏈接時(shí),返回 301 狀態(tài)碼,并賦上一個(gè)重定向地址。
HTTP/1.1 301 Moved PermanentlyLocation: http://www.example.org/index.asp
這樣用戶就能跳到正確的新地址中。
這新的重定向地址會(huì)被瀏覽器緩存,下次用戶訪問(wèn)舊鏈接時(shí),就不會(huì)發(fā)請(qǐng)求拿到 301,而是直接就跳到重定向地址了。
所以設(shè)置重定向地址時(shí)要小心點(diǎn),別搞錯(cuò)了。
還有一個(gè)常用用途是 HTTP 鏈接跳轉(zhuǎn)到 HTTPS 鏈接。
比如我們?cè)L問(wèn)http://zhihu.com/,就會(huì)跳轉(zhuǎn)到https://www.zhihu.com/。
302 Found臨時(shí)重定向。原始描述短語(yǔ)為 Moved Temporarily。
適合一些臨時(shí)的重定向操作,比如因?yàn)榉?wù)器崩潰導(dǎo)致一些頁(yè)面無(wú)法提供正確的訪問(wèn),在修復(fù)期間,則可以通過(guò) 302 先暫時(shí)地重定向到一個(gè)新的地址。修復(fù)完后再讓用戶繼續(xù)訪問(wèn)原鏈接。
302 不會(huì)持久緩存,但可以設(shè)置緩存時(shí)間持續(xù)一段時(shí)間。
HTTP/1.1 302 FoundLocation: https://www-temp.example.org/Cache-control: private; max-age=600304 Not Modified沒(méi)有改變。
304 指的是資源相比上次沒(méi)有發(fā)生變化,客戶端可以繼續(xù)使用之前緩存的資源,以減輕瀏覽器負(fù)擔(dān)。
這里涉及到了 HTTP 緩存中的強(qiáng)緩存和協(xié)商緩存知識(shí)。協(xié)商緩存中會(huì)用到 304 狀態(tài)碼。
具體可以看我之前寫的一篇文章:《HTTP 緩存策略:強(qiáng)緩存和協(xié)商緩存》
4xx 客戶端錯(cuò)誤客戶端的問(wèn)題。
400 Bad Request不好的請(qǐng)求。通用的客戶端錯(cuò)誤,表示問(wèn)題是出在客戶端身上的。比如傳的參數(shù)不對(duì)。
在前端和后端對(duì)接接口時(shí),比較常看到這個(gè)錯(cuò)誤,因?yàn)槿菀讓戝e(cuò)參數(shù)名,或者后端新增或修改了參數(shù)。
404 Not Found不存在。廣為人知的狀態(tài)碼,代表 url 對(duì)應(yīng)資源不存在。
比如一些文章被刪除,是直接在數(shù)據(jù)庫(kù)中進(jìn)行不可逆地徹底刪除的。然后就導(dǎo)致用戶訪問(wèn)這個(gè)頁(yè)面時(shí),服務(wù)器找不到對(duì)應(yīng)數(shù)據(jù),然后就返回一個(gè) 404,并提示 “頁(yè)面不存在”。
405 Method Not Allowed方法不被允許。請(qǐng)求方法沒(méi)用對(duì),比如一個(gè)請(qǐng)求應(yīng)該用 POST,你卻用了 GET 請(qǐng)求,就會(huì)得到 405。
拿到 405 通常說(shuō)明你的 url 沒(méi)錯(cuò),錯(cuò)的是方法。如果 url 也不對(duì),你拿到的將是 404。
5xx服務(wù)器錯(cuò)誤服務(wù)端的問(wèn)題,快去找后端,別老抓著前端一頓問(wèn)。
500 Internal Server Error內(nèi)部服務(wù)錯(cuò)誤。后端服務(wù)器的代碼出了 bug,比如讀取了一個(gè) null 的屬性,就會(huì)導(dǎo)致服務(wù)無(wú)法正常運(yùn)行下去,然后后端就會(huì)捕獲(catch)這個(gè)錯(cuò)誤,返回 500,告知是后端服務(wù)器出了問(wèn)題。
嚴(yán)重的情況下,后端服務(wù)直接崩潰。
502 Bad Gateway網(wǎng)關(guān)錯(cuò)誤。比如后端服務(wù)崩潰,但中間的一些代理服務(wù)器 Web Server(比如 Ngnix)還能正確運(yùn)行。但因?yàn)闊o(wú)法訪問(wèn)到后端服務(wù),所以就會(huì)返回一個(gè) 502。
504 Gateway Timout網(wǎng)關(guān)超時(shí)。網(wǎng)關(guān)還在,但后端服務(wù)因?yàn)楦鞣N原因(比如因?yàn)橐粋€(gè)死循環(huán)卡死了),導(dǎo)致一直沒(méi)有響應(yīng)回來(lái),在過(guò)了一段時(shí)間后網(wǎng)關(guān)了依舊沒(méi)能收到消息,就會(huì)給客戶端返回 504 網(wǎng)關(guān)超時(shí)。
結(jié)尾常見的 HTTP 狀態(tài)碼大概就是這些。
標(biāo)簽: HTTP 常用狀態(tài)碼
- 世界短訊!HTTP 中的常用狀態(tài)碼及使用場(chǎng)景
- 當(dāng)前簡(jiǎn)訊:SDA全景深運(yùn)維策略加速提升客戶運(yùn)維能力
- 全球首發(fā)高通驍龍8cxGen3旗艦處理器 聯(lián)想X13s上市發(fā)售
- 當(dāng)前短訊!現(xiàn)在的4G比5G還快?深挖4G網(wǎng)速越變?cè)娇斓拿孛埽?
- 快資訊丨互聯(lián)智能,如何定義下一代網(wǎng)絡(luò)變革
- 每日視訊:面試突擊:TCP 可靠嗎?為什么?
- 世界簡(jiǎn)訊:一枚資深老網(wǎng)工的網(wǎng)絡(luò)排障全過(guò)程,值得收藏!?
- 全球看熱訊:備戰(zhàn)3年,中國(guó)廣電進(jìn)軍5G的“優(yōu)”與“憂”
- 世界觀察:實(shí)時(shí)聊天室之WebSocket實(shí)戰(zhàn)
- 小米新一代游戲本正式開啟預(yù)售 散熱效能較上代提升19%