1、
http報文格式
http報文是面向文字的,報文中的每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文:請求報文和響應報文。
請求報文
乙個http請求報文由請求行(request line)、請求頭部(header)、空行和請求資料4個部分組成,下圖給出了請求報文的一般格式。
(1)請求行
請求行由請求方法字段、url欄位和http協議版本欄位3個字段組成,它們用空格分隔。例如,get /index.html http/1.1。
http協議的請求方法有get、post、head、put、delete、options、trace、connect。這裡介紹最常用的get方法和post方法。
get:當客戶端要從伺服器中讀取文件時,使用get方法。get方法要求伺服器將url定位的資源放在響應報文的資料部分,回送給客戶端。使用get方法時,請求引數和對應的值附加在url後面,利用乙個問號(「?」)代表url的結尾與請求引數的開始,傳遞引數長度受限制。例如,/index.jsp?id=100&op=bind。
post:當客戶端給伺服器提供資訊較多時可以使用post方法。post方法將請求引數封裝在http請求資料中,以名稱/值的形式出現,可以傳輸大量資料,可用來傳送檔案。
(2)請求頭部
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知伺服器有關於客戶端請求的資訊,典型的請求頭有:
user-agent:產生請求的瀏覽器型別。
accept:客戶端可識別的內容型別列表。
host:請求的主機名,允許多個網域名稱同處乙個ip位址,即虛擬主機。
(3)空行
最後乙個請求頭之後是乙個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭。
對於乙個完整的http請求來說空行是必須的,否則伺服器會認為本次請求的資料尚未完全傳送到伺服器,處於等待狀態。
(4)請求資料
請求資料不在get方法中使用,而是在post方法中使用。post方法適用於需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是content-type和content-length。
(5)請求示例
post:
post報文頭如下:
.get與
post區別
定義了與伺服器互動的不同方法,最基本的方法是
get
和post.
和http-post
是使用http
的標準協議動詞,用於編碼和傳送變數名
/變數值對引數,並且使用相關的請求語義。每個
和http-post
都由一系列
請求頭組成,這些請求頭定義了客戶端從伺服器請求了什麼,而響應則是由一系列
應答頭和應答資料組成,如果請求成功則返回應答。
以使用mime型別的
urlencoded
文字的格式傳遞引數。
urlencoding
是一種字元編碼,保證被傳送的引數由遵循規範的文字組成,例如乙個空格的編碼是
"%20"
。附加引數還能被認為是乙個查詢字串。
與http-get
類似,http-post
引數也是被
url編碼的。然而,變數名
/變數值不作為
url的一部分被傳送,而是放在實際的
請求訊息內部被傳送。(1
)get
是從伺服器上
獲取資料,
post
是向伺服器傳送
資料。(1)
在客戶端,
get方式在通過
url提交資料,資料
在url
中可以看到;
post
方式,資料放置在
html header
內提交。
(2)對於get方式,伺服器端用
request.querystring
獲取變數的值,對於post方式,伺服器端用
request.form
獲取提交的資料。(2
)get
方式提交的資料最多
只能有1024位元組
,而post
則沒有此限制。(
3)安全性問題。正如在(
1)中提到,使用
get
的時候,引數會
顯示在位址列上
,而post
不會。所以,如果這些資料是中文資料而且是非敏感資料,那麼使用
get;如果使用者輸入的資料不是中文字元而且包含敏感資料,那麼還是使用
post
為好。注:
所謂安全的意味著該操作用於獲取資訊而非修改資訊。冪等的意味著對同一
url
的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。換句話說,
get
請求一般不應產生***。從根本上講,其目標是當使用者開啟乙個鏈結時,她可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。
post
請求就不那麼輕鬆了。
post
表示可能改變伺服器上的資源的請求。仍然以新聞站點為例,讀者對文章的註解應該通過
post
請求實現,因為在註解提交之後站點已經不同了(比方說文章下面出現一條註解)。
HTTP請求報文格式 GET和POST
最近在做安卓客戶端上傳外掛程式功能,供後台呼叫。其中涉及到了拼接http請求報文,所以就對報文內容研究了一下,現在做個總結,備忘。自己使用fiddler抓取報文如下 post請求報文 此處省略二進位制等資料 7e21361611db0 包含4部分。1.第一行 請求行,說明請求型別和協議版本。http...
HTTP的報文格式 GET和POST格式解析
ttp報文是面向文字的,報文中的每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文 請求報文和響應報文。請求報文 乙個http請求報文由請求行 request line 請求頭部 header 空行和請求資料4個部分組成,下圖給出了請求報文的一般格式。1 請求行 請求行由...
HTTP的報文格式 GET和POST格式解析
http報文是面向文字的,報文中的每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文 請求報文和響應報文。請求報文 乙個http請求報文由請求行 request line 請求頭部 header 空行和請求資料4個部分組成,下圖給出了請求報文的一般格式。1 請求行 請求行...