HTTP的報文格式 GET和POST詳解

2021-06-22 11:01:19 字數 2939 閱讀 9299

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 請求行 請求行...