1. 程式人生 > >HTTP協議響應(詳解)

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:這個是請求頭,瀏覽器第二次請求一個資源時,瀏覽器傳送給伺服器的,把第一次伺服器傳送給它的時間歸還給伺服器。