1.常用狀態(tài)碼介紹
在
http響應(yīng)協(xié)議中,我們通過HttpWatch抓包抓取到響應(yīng)信息。其中響應(yīng)首行中就包含一個(gè)狀態(tài)碼。狀態(tài)碼由三位數(shù)字組成,表示請(qǐng)求是否被理解或者被滿足。HTTP響應(yīng)狀態(tài)碼的第一個(gè)數(shù)字定義了響應(yīng)的類別,后面兩位沒有具體分類,第一個(gè)數(shù)字有五種可能的取值,具體介紹如下所示:
- 1xx :表示請(qǐng)求已接收,需要繼續(xù)處理。
- 2xx :表示請(qǐng)求已經(jīng)成功被服務(wù)器接收、理解、并接受
- 3xx :為完成請(qǐng)求,客戶端需要進(jìn)一步細(xì)化請(qǐng)求
- 4xx :客戶端的請(qǐng)求有錯(cuò)誤
- 5xx :服務(wù)器端出現(xiàn)錯(cuò)誤
通過上面的介紹,現(xiàn)在我們來學(xué)習(xí)幾個(gè)具體、常用的狀態(tài)碼,如下所示:
狀態(tài)碼 |
說明 |
200 |
請(qǐng)求成功,瀏覽器會(huì)把響應(yīng)回來的信息顯示在瀏覽器端。 |
404 |
表示客戶端出錯(cuò),比如說在瀏覽器端請(qǐng)求一個(gè)不存在的資源,這時(shí)瀏覽器端會(huì)出現(xiàn)404狀態(tài)碼。 |
405 |
客戶端錯(cuò)誤的一種,表示當(dāng)前的請(qǐng)求方式不支持。比如說服務(wù)器端只對(duì)GET請(qǐng)求做了處理,而客戶端的請(qǐng)求是post方式的,這個(gè)時(shí)候會(huì)出現(xiàn)405狀態(tài)碼。 |
500 |
服務(wù)器端錯(cuò)誤,比如說服務(wù)器端代碼出現(xiàn)空指針等異常,瀏覽器就會(huì)收到服務(wù)器發(fā)送的500狀態(tài)碼。 |
302 |
表示重定向。比如說瀏覽器訪問一個(gè)資源,服務(wù)器響應(yīng)給瀏覽器一個(gè)302的狀態(tài)碼,并且通過響應(yīng)頭Location發(fā)送了一個(gè)新的url,告訴瀏覽器去請(qǐng)求這個(gè)url。這就是重定向。 |
304 |
第一訪問一個(gè)資源后,瀏覽器會(huì)將該資源緩存到本地,第二次再訪問該資源時(shí),如果該資源沒有發(fā)生改變,那么服務(wù)器響應(yīng)給瀏覽器304狀態(tài)碼,告訴瀏覽器使用本地緩存的資源。 |
2.304狀態(tài)碼詳解
通過常用狀態(tài)碼的介紹,我們對(duì)304狀態(tài)碼有了一定的了解,現(xiàn)在通過一張圖來詳細(xì)了解該狀態(tài)碼,如圖1-1所示:
圖1-1 304狀態(tài)碼詳解
現(xiàn)在,對(duì)圖1-1進(jìn)行分析:
(1)瀏覽器第一次請(qǐng)求資源,index.jsp。
(2)服務(wù)器端響應(yīng)成功,發(fā)送狀態(tài)碼200,響應(yīng)信息中包含一個(gè)Last-Modified響應(yīng)頭,該響應(yīng)頭的值是index.jsp文件的最后修改時(shí)間,如2014/11/10 6:51。
(3)瀏覽器接收到服務(wù)器發(fā)送過來的響應(yīng)信息,將結(jié)果顯示出來,并將響應(yīng)內(nèi)容及時(shí)間緩存在本地。
(4)瀏覽器第二次訪問這個(gè)index.jsp頁(yè)面,在請(qǐng)求信息中包含If-Modified-Since請(qǐng)求頭,該請(qǐng)求頭的值是瀏覽器緩存在本地的時(shí)間,也是第一次請(qǐng)求時(shí)服務(wù)器響應(yīng)回來的時(shí)間:2014/11/10 6:51。
(5)服務(wù)器收到瀏覽器的請(qǐng)求,獲得請(qǐng)求頭If-Modified-Since的值,將這個(gè)值與服務(wù)器端index.jsp文件的最后修改時(shí)間進(jìn)行比較,如果一致,表示服務(wù)器端沒有對(duì)index.jsp進(jìn)行修改,瀏覽器緩存的是最新的,這時(shí)服務(wù)器會(huì)響應(yīng)304狀態(tài)碼給瀏覽器。如果不一致,則正常響應(yīng),將最新的資源響應(yīng)給瀏覽器。
在上面的304詳解時(shí),提到了兩個(gè)頭:
- Last-Modified:這個(gè)是響應(yīng)頭,是瀏覽器第一次請(qǐng)求一個(gè)資源時(shí),服務(wù)器發(fā)送給瀏覽器的,值為請(qǐng)求內(nèi)容最后的修改時(shí)間。
If-Modified-Since:這個(gè)是請(qǐng)求頭,瀏覽器第二次請(qǐng)求一個(gè)資源時(shí),瀏覽器發(fā)送給服務(wù)器的,把第一次服務(wù)器發(fā)送給它的時(shí)間歸還給服務(wù)器。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee