我們經(jīng)常會聽到HTTP協(xié)議,我們也每天都會用到HTTP協(xié)議,那么HTTP的面紗下到底是什么呢?我們今天就先來聊聊HTTP協(xié)議的狀態(tài)碼。
我們繼續(xù)上回的故事~上回書說到,成哥給鄧哥介紹了一個女朋友(鐵錘妹妹),然后害羞的鄧哥寫了一封信,讓思彤幫忙送給鐵錘妹妹。
這個時候鄧哥就相當(dāng)于計算機世界中的瀏覽器,鐵錘妹妹相當(dāng)于計算機世界中的服務(wù)器。鄧哥給鐵錘妹妹送的信,就相當(dāng)于是瀏覽器給服務(wù)器發(fā)送的請求,信件的內(nèi)容就是我們發(fā)出請求的內(nèi)容。
思彤到了鐵錘妹妹家,在鐵錘妹妹家門口喊出那句暗號:“天王蓋地虎!”。這時有很多種可能性。我們來依次看看這些可能性~
1
如果喊完暗號之后,沒有人開門,這時候隔壁老王出來了,對思彤說:”鐵錘搬家了,搬到了如花大街200號~“
這時候思彤就要再去如花大街200號送信,這個過程就叫做永久移動(Moved Permanently),對應(yīng)的HTTP狀態(tài)碼是301。如果我們的瀏覽器是將這個URL收藏了,那么當(dāng)接收到301的狀態(tài)碼之后,瀏覽器應(yīng)該會修改鏈接,修改為新的URL。當(dāng)然3XX的狀態(tài)碼不只有301。
2
如果鐵錘妹妹并沒有搬家,而是暫時去閨蜜家住了。
那么這種情況叫做臨時重定向,對應(yīng)的狀態(tài)碼為302。還有個狀態(tài)碼和302個功能很相似。
3
如果隔壁王大爺說,鐵錘去閨蜜家住了,但是如果不是女生不給開門~
這種情況中,鐵錘妹妹去閨蜜家了,所以需要臨時重定向,但是這種情況和302的臨時重定向有什么區(qū)別呢?區(qū)別就在于請求的方式不一樣。這里男生送信就是POST請求方式,女生請求就是GET請求方式。這時候的狀態(tài)碼就是303,表示需要臨時重定向,并且必須用GET方式請求。
4
當(dāng)然還有很多的可能性:比如說鐵錘妹妹根本就沒住在這~
這種情況就叫做找不到系統(tǒng)資源,對應(yīng)的HTTP狀態(tài)碼是大名鼎鼎的404。4XX家族還有很多狀態(tài)
5
還有一些很有趣的情況,比如思彤到了鐵錘妹妹家,喊錯了暗號,喊成了:“天王蓋地鼠~”,這時候鐵錘妹妹聽到這個暗號感覺外面有個神經(jīng)病,這時候也不會給開門,直接讓思彤走開~
這種情況就是我們的協(xié)議格式出現(xiàn)了問題,這種情況下返回的狀態(tài)碼是:401
6
再比如,思彤到了鐵錘妹妹家,喊出了口號:“天王蓋地虎!”,但是今天鐵錘妹妹心情不好,就是不開門,讓思彤走開,無論你怎么說好話也叫不開門~(女生的心思你難猜~)
這種情況就相當(dāng)于是服務(wù)器拒絕了請求,HTTP狀態(tài)碼為:403。但是這個狀態(tài)很有趣,這個狀態(tài)是可以在返回體中給出拒絕的原因,但是通常情況下,這個狀態(tài)碼是在服務(wù)器不想給出原因的情況下使用的。所以這種情況很符合一個女生生氣的情況~必然是有原因的,但是不會輕易告訴你~
7
我們再假設(shè),思彤到了鐵錘妹妹家,但是鐵錘妹妹正在打電話,沒有空理思彤~
由于我們之前設(shè)定好的,鄧哥相當(dāng)于瀏覽器,鐵錘妹妹相當(dāng)于服務(wù)器,所以這個時候的情況就是服務(wù)器繁忙。服務(wù)器繁忙對應(yīng)的狀態(tài)碼是503。一般在服務(wù)器負(fù)載時會返回503狀態(tài)碼。
8
思彤到了鐵錘妹妹家,率先說出暗號:“天王蓋地虎~”。鐵錘妹妹答道:“鄧哥一米五~”思彤:“寶塔鎮(zhèn)河妖~”鐵錘妹妹:“鄧哥長不高~”對上暗號之后,思彤將信遞給了鐵錘妹妹~(思彤終于可以把信交給鐵錘妹妹了~)但是這個時候出了個問題~鐵錘妹妹不識字。。。這樣就沒法繼續(xù)下去了。。。
前面對暗號的過程,就好像是解析HTTP協(xié)議的過程。后面讀信件的過程就相當(dāng)于是獲取出數(shù)據(jù)之后進(jìn)行處理的過程。但是由于鐵錘妹妹不識字沒法正常的讀信。這就像是服務(wù)器程序出現(xiàn)了錯誤,在讀取信件的過程中發(fā)生了錯誤。所以這個時候報出的HTTP狀態(tài)碼為:500
9
我們假設(shè)思彤和鐵錘妹妹對上了暗號,鐵錘妹妹也認(rèn)識字~鐵錘妹妹仔讀了這封信之后,給鄧哥回了一封信。信的內(nèi)容只有四個字:“做夢去吧~”。(經(jīng)歷了這么多的磨難,終于得到鐵錘妹妹的回信了~)
當(dāng)瀏覽器要發(fā)送的內(nèi)容被服務(wù)器端接收并處理之后,得到服務(wù)器端返回的消息。鐵錘妹妹的回信就相當(dāng)于是服務(wù)器端返回的信息。這樣的一個來回就完成了一次HTTP請求。這個時候返回的狀態(tài)碼為:200
10
當(dāng)思彤完成第一次送信之后,鄧哥看到了鐵錘妹妹的回信,覺得好桑心~于是決定再寫一封信給鐵錘妹妹。當(dāng)思彤又一次送信給鐵錘妹妹的時候,這次鐵錘妹妹并沒有直接回信,而是告訴思彤,還讓鄧哥看之前的那封信就行~(鐵錘妹妹已經(jīng)懶得寫了~)
當(dāng)瀏覽器多次訪問同一個資源的時候,如果第一次請求的結(jié)果還在緩存,還沒有過期,那么在此訪問這個資源的時候,為了減少網(wǎng)絡(luò)傳輸?shù)南模绻@個資源沒有被修改過,則可以讓瀏覽器繼續(xù)使用之前緩存的內(nèi)容,這樣就不用再將資源發(fā)送一遍了,所以就減少了很多的網(wǎng)絡(luò)開銷。這個時候服務(wù)器返回的狀態(tài)碼為:304。雖然這個狀態(tài)碼也是3XX系列的,但是我們可以發(fā)現(xiàn)這個狀態(tài)碼看似和重定向沒有什么關(guān)系~但是我們可以理解為,服務(wù)器要求瀏覽器將請求重定向到瀏覽器本身。
以上的十個狀態(tài)是HTTP狀態(tài)碼中最常見的一些狀態(tài)碼,也是我們Web前端初學(xué)者必須要記住的狀態(tài)碼。當(dāng)然HTTP協(xié)議的狀態(tài)碼遠(yuǎn)遠(yuǎn)不止這些。我們之后講HTTP協(xié)議的文章中,會更詳細(xì)的為大家介紹HTTP協(xié)議。