HTTP請求頭、響應頭詳解
HTTP的頭域包括通用頭、請求頭、響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成(說白了就是鍵值對)。
- 通用頭:是客戶端和伺服器都可以使用的頭部,可以在客戶端、伺服器和其他應用程式之間提供一些非常有用的通用功能,如Date頭部。
- 請求頭:是請求報文特有的,它們為伺服器提供了一些額外資訊,比如客戶端希望接收什麼型別的資料,如Accept頭部。
- 響應頭:便於客戶端提供資訊,比如,客服端在與哪種型別的伺服器進行互動,如Server頭部。
- 實體頭:指的是用於應對實體主體部分的頭部,比如,可以用實體頭部來說明實體主體部分的資料型別,如Content-Type頭部。
HTTP請求報文解剖
HTTP請求報文由3部分組成(請求行+請求頭+請求體):
下面是一個實際的請求報文:
①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。不過,當前的大多數瀏覽器只支援GET和POST,Spring 3.0提供了一個HiddenHttpMethodFilter,允許你通過“_method”的表單引數指定這些特殊的HTTP方法(實際上還是通過POST提交表單)。服務端配置了HiddenHttpMethodFilter後,Spring會根據_method引數指定的值模擬出相應的HTTP方法,這樣,就可以使用這些HTTP方法對處理方法進行映射了。
②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL,③是協議名稱及版本號。
④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的資訊。
⑤是報文體,它將一個頁面表單中的元件值通過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求引數的資料。不但報文體可以傳遞請求引數,請求URL也可以通過類似於“/chapter15/user.html? param1=value1¶m2=value2”的方式傳遞請求引數。
對照上面的請求報文,我們把它進一步分解,你可以看到一幅更詳細的結構圖:
- Host:www.baidu.com 本次請求訪問的主機地址(虛擬主機名稱)
- Cache-control:no-cache 設定網頁快取的使用方法
- Pragma:no-cache
- Accept:text/html,xxxxxx…..客戶端可以接收的資料型別(如果內容是:*/*,表示接收所有型別)
- User-Agent:Mozilla/5.0xxxxx 主要表示客戶端型別
- Accept-Encoding:gzip,deflate,sdch 瀏覽器能夠接收的資料壓縮編碼方式(表示瀏覽器能夠接收什麼格式的壓縮的資料)
- Accept-Language:zh-CN,zh;q=0.8 瀏覽器期望的接受的語言種類
- Accept-Charset: ISO-8859-1 客戶端所接收的字符集編碼
-
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 和快取機制相關的頭
- Referer: http://www.smyh.me/index.jsp 當前頁面來自哪個頁面(可能是由之前的頁面通過超連結點進到這個頁面來)
- Cookie
- Connection: close/Keep-Alive 請求完之後,是關閉此連線,還是繼續保持連線
- Date: Tue, 11 Jul 2013 18:23:51 GMT 當前請求的時間
HTTP響應報文解剖
響應報文結構
HTTP的響應報文也由三部分組成(響應行+響應頭+響應體):
以下是一個實際的HTTP響應報文:
①報文協議及版本;
②狀態碼及狀態描述;
③響應報文頭,也是由多個屬性組成;
④響應報文體,即我們真正要的“乾貨”。
- Location: http://www.smyh.me/index.jsp 重定向(302+Location實現重定向)
- Server 伺服器型別
- Content-Encoding 伺服器當前返回給客戶端的資料壓縮格式
- Content-Length 返回給客戶端的資料量的大小
- Content-Language: zh-cn 語言種類
- Content-Type: text/html; charset=GB2312 返回的資料的型別、字符集編碼方式
- Last-Modified 資源最後一次修改的時間(配合請求頭中的If-Modified-Since+304/307實現快取機制)
- Refresh: 1;url=http://www.it315.org 隔多少秒以後,讓當前頁面去訪問哪個地址(例如網頁登陸成功後,跳回原來的介面,就是用的這個頭)
- Content-Disposition: attachment;filename=aaa.zip 和下載相關,通知瀏覽器以附件的形式下載伺服器傳送過去的資料
- Transfer-Encoding: chunked 資料傳輸模式
- Set-Cookie:SS=Q0=5Lb_nQ; path=/search 和cookie相關的頭
- ETag: W/"83794-1208174400000" 和cookie相關的頭
- Expires: -1 通知瀏覽器是否快取當前資源:如果這個頭的值是一個以毫秒為單位值,則通知瀏覽器快取資源到指定的時間點;如果值是0或-1,則通知瀏覽器禁止快取
- Cache-Control: no-cache 通知瀏覽器是否快取資源
- Pragma: no-cache -- 通知瀏覽器是否快取資源
注: 之所以三個頭是一個功能,是因為歷史原因。不同的瀏覽器對這三個頭支援的不同,一般來說這三個頭要同時使用,以確保不同的瀏覽器都能實現控制快取的功能
- Connection: close/Keep-Alive 是否繼續保持連線
- Date: Tue, 11 Jul 2000 18:23:51 GMT 當前響應的時間