數據提交方式:post和get

衆所周知,在B/S應用程序中,前臺與後臺的數據交互,都是通過HTML中Form表單完成的。而Form提供了兩種數據傳輸的方式——get和post。       
   Get請求表示客戶端請求一個uri,服務器返回客戶端請求的uri,post請求表示客戶端請求的時候還要提交數據,比喻提交form表單,要提交的數據會放到請求報文的body部分。服務器收到後這樣的請求後通常需要來處理這些數據。
   事實上,Get適用於多數請求,而保留 POST僅用於更新站點。根據 HTTP 規範,Get用於信息獲取,而且應該是 安全的和 冪等的。所謂安全的意味着該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味着對同一 URL 的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,她可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認爲是安全的和冪等的,因爲它總是返回當前的新聞。反之亦然。POST 請求就不那麼輕鬆了。POST 表示可能改變服務器上的資源的請求。仍然以新聞站點爲例,讀者對文章的註解應該通過 POST 請求實現,因爲在註解提交之後站點已經不同了(比方說文章下面出現一條註解); 
在FORM提交的時候,如果不指定Method,則默認爲GET請求,Form中提交的數據將會附加在url之後,以?分開與url分開。字母數字字符原樣發送,但空格轉換爲“ “號,其它符號轉換爲%XX,其中XX爲該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中; 
GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。    
   Form中的Get和POST方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:
1、Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。
2、Get 方法通過 URL 請求來傳遞用戶的數據,將表單內各字段名稱與其內容,以成對的字符串連接,置於 action 屬性所指程序的 url 後,如[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url],數據都會 直接顯示在 url 上,就像用戶點擊一個鏈接一樣;Post 方法通過 HTTP post 機制,將表單內各字段名稱與其內容放置在 HTML 表頭(header)內一起傳送給服務器端交由 action 屬性能所指的程序處理,該程序會通過標準輸入(stdin)方式,將表單的數據讀出並加以處理
3、Get 方式需要使用 Request.QueryString 來取得變量的值;而 Post 方式通過 Request.Form 來訪問提交的內容
4、Get是不安全的,因爲在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
5、Get 方式傳輸的數據量非常小,一般限制在 2 KB 左右,但是執行效率卻比 Post 方法好;而 Post 方式傳遞的數據量相對較大,它是等待服務器來讀取數據,不過也有字節限制,這是爲了避免對服務器用大量數據進行惡意攻擊,根據微軟方面的說法,微軟對用 Request.Form() 可接收的最大數據有限制,IIS 4 中爲 80 KB 字節,IIS 5 中爲 100 KB 字節
 建議:除非你肯定你提交的數據可以一次性提交,否則請儘量用 Post 方法
6、Get限制Form表單的數據集的值必須爲ASCII字符;而Post支持整個ISO10646字符集。
7、Get是Form的默認方法。

 建議:出於安全性考慮,建議最好使用 Post 提交數據


轉自:http://blog.csdn.net/thunderous/article/details/1890391

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章