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