Form提供了兩種數據傳輸的方式:get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對數據產生嚴重的影響。 Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下: 1、Get是用來從伺服器上獲得數據, ...
Form提供了兩種數據傳輸的方式:get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對數據產生嚴重的影響。
Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:
1、Get是用來從伺服器上獲得數據,而Post是用來向伺服器上傳遞數據。
(本人認為此種說法有些歧義,Get一般是用來從伺服器上獲取數據,然後在頁面中體現數據;但是Get也是可以向伺服器傳遞數據,比如查詢,一般是用get方法遞交查詢條件的。個人理解,錯誤的話,希望大家糾正)
2、Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用“?”連接,而各個變數之間使用“&”連接;Post是將表單中的數據放在form的數據體中,按照變數和值相對應的方式,傳遞到action所指向URL。
3、Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多伺服器、代理伺服器或者用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
(個人認為:若是採用Get方式提交數據,所傳遞的數據看與看不見都是無所謂的,此方式傳遞的數據在頁面中一般都是體現出來的,比如查詢之類。
若有不想體現的數據,想用Post方式提交,比如hidden的部分,嚴格來說,這也是用戶可以看見的。
當然類似登錄場景是特殊的一種情況。所以安全與否可以這樣說,涉及到安全的信息需要使用Post,但更多的使用Post方式是需要提交更多數據的場景下。)
4、Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post。
5、Get限制Form表單的數據集的值必須為ASCII字元;而Post支持整個ISO10646字元集。
6、Get是Form的預設方法。
7、使用Post傳輸的數據,可以通過設置編碼的方式正確轉化中文;而Get傳輸的數據不進行編碼直接進行傳遞(Get的編碼方式是根據頁面中指定的編碼方式)。
舉例說明:
1、Get 方法通過 URL 請求來傳遞用戶的數據,將表單內各欄位名稱與其內容,以成對的字元串連接,置於 action 屬性所指程式的 url 後,如http://www.mdm.com/test.asp?name=asd&password=sad,數據都會直接顯示在 url 上,就像用戶點擊一個鏈接一樣;
Post 方法通過 HTTP post 機制,將表單內各欄位名稱與其內容放置在 HTML 表頭(header)內一起傳送給伺服器端交由 action 屬性所指的程式處理,該程式會通過標準輸入(standard input)方式,將表單的數據讀出並加以處理。
2、 Get 方式需要使用 Request.QueryString 來取得變數的值;而 Post 方式通過 Request.Form 來訪問提交的內容。
3、Get 方式傳輸的數據量非常小,一般限制在 2 KB 左右,但是執行效率卻比 Post 方法好;而 Post 方式傳遞的數據量相對較大,它是等待伺服器來讀取數據,不過也有位元組限制,這是為了避免對伺服器用大量數據進行惡意攻擊,根據微軟方面的說法,微軟對用 Request.Form() 可接收的最大數據有限制,IIS 4 中為 80 KB 位元組,IIS 5 中為 100 KB 位元組。
建議:除非你肯定你提交的數據可以一次性提交,否則請儘量用 Post 方法。
4、Get 方式提交數據,會帶來安全問題,比如一個登陸頁面,通過 Get 方式提交數據時,用戶名和密碼將出現在 URL 上,如果頁面可以被緩存或者其他人可以訪問客戶這台機器,就可以從歷史記錄獲得該用戶的帳號和密碼。
所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果刷新的時候,會彈出一個對話框。
建議:出於安全性考慮,建議最好使用 Post 提交數據。
參考鏈接:http://www.cnblogs.com/hnrainll/archive/2011/06/07/2074597.html