序,form表單中的方法分為get和post,但你都知道他們之間的區別嗎?
Form表單中method為get和post的區別:
例子如下,有個Form表單。
<form action="getPostServlet/getPost.do?param4=param4" method="get">
<input type="hidden" name="param1" value="param1">
<input type="hidden" name="param2" value="param2">
<input type="text" name="param3" value="param3" readonly>
<input type="submit" name="button1" value="submit">
</form>
(1)method=get時,?后面的參數param4=param4不會被傳到服務器,因為瀏覽器在傳送之前,重新拼裝URL為http://localhost/mywebapp/getPostServlet/getPost.do?pram1=param1&pram2=param2&pram3=param3&button1=submit,所以?后面的參數就被替換了,因為是get請求,所以瀏覽器會將form表單中的標簽都放到URL中傳到服務器,服務器端獲取參數值是通過Request.QueryString獲取變量的值。
(2)如果method=post時,瀏覽器會將getPostServlet/getPost.do?param4=param4傳遞到服務器,同時會將form數據集包裝在請求的body中傳遞到服務器。服務器獲取數據是通過Request.form獲取提交的數據。
(3)get和post的區別
一、安全性
因為get會將用戶名和密碼放在URL中,進而出現在瀏覽器的歷史記錄中,顯然這種情況應該用post.
二、編碼
get只能向服務器發送ASCII字符,而post則可以發送ISO 10646中的字符
get和post對應的enctype屬性有區別:
application/x-www-form-urlencoded
在發送前編碼所有字符(默認)
multipart/form-data
不對字符編碼。 在使用包含文件上傳控件的表單時,必須使用該值。
text/plain
空格轉換為 "+" 加號,但不對特殊字符編碼。
三、提交數據的長度
IE將請求的URL長度限制為2083個字符,從而限制了get提交的數據長度,如果URL超出了這個限制,提交form時IE不會有任何反映。
四、緩存
由於一個get得到的結果直接對應到一個URL,所以get的結果頁面有可能被瀏覽器緩存,而post一般不能
五、引用和SEO
可以用一個URI引用一個get的結果頁面,而post的結果則不能,所以必然不能被搜索引擎搜到。
最本質的區別
get是用來從服務器上獲得數據,而post是用來向服務器上傳遞數據
如果采用Post方法,瀏覽器將會按照下面兩步來發送數據。
首先瀏覽器將action屬性中指定的表單處理服務器建立聯系,一旦建立連接之后,瀏覽器就會按分段傳輸的方法將數據發送給服務器。
在服務器端,一旦Post樣式的應用程序開始執行時,就應該從一個標志位置讀取參數,而一旦讀到參數,在應用程序能夠使用這些表單值以前,必須對這些參數進行解碼,用戶特定的服務器會明確指定應用程序應該如何接受這些參數。
采用Get方法:
瀏覽器會直接與表單處理服務器建立連接,然后直接在一個傳輸步驟中發送所有的表單數據,然后直接在一個傳輸步驟中發送所有的表單數據。
2、Get將表單中數據的按照variable=value的形式,添加到action所指向的URL后面,並且兩者使用“?”連接,而各個變量之間使用“&”連接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL。
六、正確的使用get和post
當且僅當form是冪等的時候,使用get。
冪等:多次相同的請求產生的副作用,和一次請求的副作用相同。
如果提交請求純粹只是從服務器端獲取數據而不是進行其他操作,並且多次提交不會有明顯的副作用,應該使用get。
比如:搜索引擎的查詢(http://www.google.com/search?q=abc)和分頁(user.do?page=1)
如果提交這個請求會產生其他操作和影響,就應該使用post。
比如:修改服務器上數據庫中的數據;發送一封郵件;刪除一個文件等
另一個要考慮因素是安全性。
若符合下列任一情況,則用post方法:
a.請求的結果有持續性的副作用,例如:數據庫內添加新的數據行。
b.若使用get方法,則表單上收集的數據可能讓URL過長。
c.要傳送的數據不是采用ASCII編碼。
若符合下列任一情況,則用get方法:
a.請求是為了查找資源,html表單數據僅用來搜索。
b.請求結果無持續性的副作用。
c.收集的數據及html表單內的輸入字段名稱的總長不超過1024個字符。
七、瀏覽器差異
IE6:URL長度限制為2083個字符;post之后,刷新頁面不會自動重新post數據,會出現警告。
IE7和IE6相同。
Firefox:刷新頁面不會自動重新post數據會出現警告。
post和get容易忽視的一點差別:
就是當method為get時,action屬性中URL后面的參數是忽視的。
例如:
action=insert.jsp?name=tobby method=get,當我們提交之后真正的url中是沒有name=tobby的,他會根據表單中的內容重新組裝成一個url的,假如form中有一個文本框,<input type="text" name="address" value="wuhan">,那么url會變成insert.jsp?addresswuhan.
