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請求消息內部被傳送。
GET和POST之間的主要區別以下:
(1)get是從服務器上獲取數據,post是向服務器傳送數據。
(2)在客戶端,Get方式在經過URL提交數據,數據在URL中能夠看到;POST方式,數據放置在HTML HEADER內提交。
(3)對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
(4) GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。
(5) 安全性問題。正如在(2)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。因此,若是這些數據是中文數據並且是非敏感數據,那麼使用 get;若是用戶輸入的數據不是中文字符並且包含敏感數據,那麼仍是使用 post爲好。
注:所謂安全的意味着該操做用於獲取信息而非修改信息。冪等的意味着對同一 URL 的多個請求應該返回一樣的結果。完整的定義並不像看起來那樣嚴格。換句話說,GET 請求通常不該產生反作用。從根本上講,其目標是當用戶打開一個連接時,她能夠確信從自身的角度來看沒有改變資源。好比,新聞站點的頭版不斷更新。雖然第二次請求會返回不一樣的一批新聞,該操做仍然被認爲是安全的和冪等的,由於它老是返回當前的新聞。反之亦然。POST 請求就不那麼輕鬆了。POST 表示可能改變服務器上的資源的請求。仍然以新聞站點爲例,讀者對文章的註解應該經過 POST 請求實現,由於在註解提交以後站點已經不一樣了(比方說文章下面出現一條註解)。 服務器
一個簡單的例子來講明它們的區別:
<!-分別經過get和post方式提交表單-->
<FORM ACTION="getpost.asp" METHOD="get">
<INPUT TYPE="text" NAME="Text" VALUE="http://wxf0701.cnblogs.com//>
<INPUT TYPE="submit" VALUE="Get方式"></INPUT>
</FORM>
<BR>
<FORM ACTION="getpost.asp" METHOD="post">
<INPUT TYPE="text" NAME="Text" VALUE="http://wxf0701.cnblogs.com/>
<INPUT TYPE="submit" VALUE="Post方式"></INPUT>
</FORM>
<BR>
<% 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>
<% End If %> app