天天看點

【轉】Http之Get/Post請求差別

1.HTTP請求格式:

<request line>

<headers>

<blank line>

[<request-body>]

在HTTP請求中,第一行必須是一個請求行(request line),用來說明請求類型、要通路的資源以及使用的HTTP版本。緊接着是一個首部(header)小節,用來說明伺服器要使用的附加資訊。在首部之後是一個空行,再此之後可以添加任意的其他資料[稱之為主體(body)]。

2.GET與POST差別

HTTP定義了與伺服器互動的不同方法,最基本的方法是 GET 和 POST.

HTTP-GET和HTTP-POST是使用HTTP的标準協定動詞,用于編碼和傳送變量名/變量值對參數,并且使用相關的請求語義。每個HTTP-GET和HTTP-POST都由一系列HTTP請求頭組成,這些請求頭定義了用戶端從伺服器請求了什麼,而響應則是由一系列HTTP應答頭和應答資料組成,如果請求成功則傳回應答。

HTTP-GET以使用MIME類型application/x-www-form-urlencoded的urlencoded文本的格式傳遞參數。Urlencoding是一種字元編碼,保證被傳送的參數由遵循規範的文本組成,例如一個空格的編碼是"%20"。附加參數還能被認為是一個查詢字元串。

與HTTP-GET類似,HTTP-POST參數也是被URL編碼的。然而,變量名/變量值不作為URL的一部分被傳送,而是放在實際的HTTP請求消息内部被傳送。

(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 請求實作,因為在注解送出之後站點已經不同了(比方說文章下面出現一條注解)。

下面舉一個簡單的例子來說明它們的差別:

<!-分别通過get和post方式送出表單-->

<FORM ACTION="getpost.asp" METHOD="get">

<INPUT TYPE="submit" VALUE="Get方式"></INPUT>

</FORM>

<BR>

<FORM ACTION="getpost.asp" METHOD="post">

<INPUT TYPE="submit" VALUE="Post方式"></INPUT>

<% If Request.QueryString("Text") <> "" Then %>

通過get方式傳遞的字元串是: "<B><%= Request.QueryString("Text") %></B>"<BR>

<% End If %>

<% If Request.Form("Text") <> "" Then %>

通過Post方式傳遞的字元串是: "<B><%= Request.Form("Text") %></B>"<BR>

本文轉自齊師傅部落格園部落格,原文連結:http://www.cnblogs.com/youring2/archive/2011/03/24/HttpRequestMethod_POST_GET.html,如需轉載請自行聯系原作者

繼續閱讀