HTTP協議響應(詳解)
HTTP協議詳解之響應
什麼是HTTP響應
當伺服器收到瀏覽器的請求後,會發送響應訊息給瀏覽器。一個完整的響應訊息主要包括響應首行、響應頭資訊、空行和響應正文。
HTTP響應訊息分析
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 624
Date: Mon, 03 Nov 2014 06:37:28 GMT
響應體內容
(1)響應首行:其內容是”HTTP/1.1 200 OK”
l HTTP/1.1 :表示協議版本
l 200 :表示響應狀態碼,200表示響應成功。
l OK :表示響應成功,對響應狀態碼的解釋。
(2)響應頭資訊:類似於請求訊息中的請求頭,其格式和請求頭資訊格式一樣,即響應頭:響應頭值。
l Server響應頭:該響應頭是伺服器告訴瀏覽器,當前響應的服務型別和版本。
l Content-Type響應頭:伺服器告訴瀏覽器響應內容是什麼型別,以及採用的是什麼字元編碼。該響應頭的值現在為:text/html;charset=utf-8。說明響應資訊的型別是文字型別中的html,使用的字元編碼是utf-8。
l Content-Length響應頭:伺服器告訴瀏覽器,響應內容的長度,該響應內容的長度現在是624個位元組。
l Date響應頭:表示是伺服器是在什麼時候響應回瀏覽器,注意這裡的時間是按照美國時間來計算。
(3)空行:響應頭和響應體由空行連線。
(4)響應體:該響應訊息的響應體是一個html文件。瀏覽器可以直接識別這個html檔案。而我們訪問的是一個jsp檔案,響應回去的是一個html檔案。說明伺服器將該jsp翻譯成了一個html,然後再響應給瀏覽器。
響應狀態碼
在http響應協議中,我們通過HttpWatch抓包抓取到響應資訊。其中響應首行中就包含一個狀態碼。狀態碼由三位數字組成,表示請求是否被理解或者被滿足。HTTP響應狀態碼的第一個數字定義了響應的類別,後面兩位沒有具體分類,第一個數字有五種可能的取值,具體介紹如下所示:
l 1xx :表示請求已接收,需要繼續處理。
l 2xx :表示請求已經成功被伺服器接收、理解、並接受
l 3xx :為完成請求,客戶端需要進一步細化請求
l 4xx :客戶端的請求有錯誤
l 5xx :伺服器端出現錯誤
通過上面的介紹,現在我們來學習幾個具體、常用的狀態碼,如下所示:
狀態碼 |
說明 |
200 |
請求成功,瀏覽器會把響應回來的資訊顯示在瀏覽器端。 |
404 |
表示客戶端出錯,比如說在瀏覽器端請求一個不存在的資源,這時瀏覽器端會出現404狀態碼。 |
405 |
客戶端錯誤的一種,表示當前的請求方式不支援。比如說伺服器端只對GET請求做了處理,而客戶端的請求是post方式的,這個時候會出現405狀態碼。 |
500 |
伺服器端錯誤,比如說伺服器端程式碼出現空指標等異常,瀏覽器就會收到伺服器傳送的500狀態碼。 |
302 |
表示重定向。比如說瀏覽器訪問一個資源,伺服器響應給瀏覽器一個302的狀態碼,並且通過響應頭Location傳送了一個新的url,告訴瀏覽器去請求這個url。這就是重定向。 |
304 |
第一訪問一個資源後,瀏覽器會將該資源快取到本地,第二次再訪問該資源時,如果該資源沒有發生改變,那麼伺服器響應給瀏覽器304狀態碼,告訴瀏覽器使用本地快取的資源。 |
在304詳解時,會提到了兩個頭:
l Last-Modified:這個是響應頭,是瀏覽器第一次請求一個資源時,伺服器傳送給瀏覽器的,值為請求內容最後的修改時間。
If-Modified-Since:這個是請求頭,瀏覽器第二次請求一個資源時,瀏覽器傳送給伺服器的,把第一次伺服器傳送給它的時間歸還給伺服器。