Form表單中method為get和post的區別


序,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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM