1. 程式人生 > >HTTP請求行、請求頭、請求體小結

HTTP請求行、請求頭、請求體小結

HTTP請求報文解剖

HTTP請求報文由3部分組成(請求行+請求頭+請求體):


下面是一個實際的請求報文:


其中,1、2、3是請求行,分別是請求方法,資源名稱,HTTP版本號,4是請求頭,5是請求體

細說:

①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。不過,當前的大多數瀏覽器只支援GET和POST,Spring 3.0(java框架)提供了一個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”的方式傳遞請求引數,如果是GET方法則沒有請求體。 

HTTP請求報文頭屬性

Accept



請求報文可通過一個“Accept”報文頭屬性告訴服務端 客戶端接受什麼型別的響應(就是什麼樣的資料)

Cookie

客戶端的Cookie就是通過這個報文頭屬性傳給服務端,如下所示

Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23BE13C4C  

服務端是怎麼知道客戶端的多個請求是隸屬於一個Session呢?注意到後臺的那個jsessionid=5F4771183629C9834F8382E23BE13C4C,原來就是通過HTTP請求報文頭的Cookie屬性的jsessionid的值關聯起來的!(當然也可以通過重寫URL的方式將會話ID附帶在每個URL的後面)

Referer

表示這個請求是從哪個URL過來的

Cache-Control

對快取進行控制,如一個請求希望響應返回的內容在客戶端要被快取一年,或不希望被快取就可以通過這個報文頭達到目的。 

原文連結