轉:http://blog.chinaunix.net/uid-21778123-id-1815443.html
(1)使用范圍的區別:
使用GET時,form中的數據集(如input框的value)將被編碼到URL中,作為URL的一部分。而使用POST時,form中的數據集則被編碼到http協議的header中,構造成消息發送。在使用上,當且僅當請求是冪等(請求任意次都返回同樣的結果)時使用GET,而當請求會改變服務器數據或狀態時使用POST。當程序設計人員正確的使用GET,POST時,瀏覽器會給出更好的緩存配合,使響應速度更快。
(2)在form提交階段的差別:
form 提交的第一步是創建數據集,並根據 ENCTYPE 指定的類型值對數據集進行編碼。 ENCTYPE 有兩個值:multipart/form-data,application/x-www-form-urlencoded(默認值)。form提交的第 二步是進行數據傳輸。對於GET方法,數據集使用application/x-www-form-urlencoded編碼;而對於POST方法,數據集 的 ENCTYPE 可以指定。
application/x-www-form-urlencoded對form數據集的編碼規則:(1)如果是字母或數字,則直接使用其ascii碼的十六進制。(2)對於非字母也非數字的字符,則不僅使用其ascii碼的十六進制,還要在前面加上“%”。比如“\”,它的ascii碼是92,92的十六進制是5c,所以“\”的urlencoded編碼就是%5c。相應的解碼函數(轉載)如下:
|
|
(3)服務器端處理差別:
原則上,處理GET和POST請求是沒有分別的。但由於數據通過不同的方法編碼,需要有不同的解碼機制。所以,方法變化將導致處理請求的代碼變化。比如對 於cgi,處理GET時通過環境變量獲得參數,處理POST請求時則通過標准輸入(stdin) 獲得數據。
(4)實際使用經驗的總結:
1、get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過 HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
2、對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。兩種方式的參數都可以用Request來獲得。
3、get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
4、get安全性非常低,post安全性較高。
5、
<--文章完-->
