1. 程式人生 > >HTTP請求頭、響應頭詳解

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&param2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求引數的資料。不但報文體可以傳遞請求引數,請求URL也可以通過類似於“/chapter15/user.html? param1=value1&param2=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    當前響應的時間