一、問題的提出
注意到表單中action:getpostservlet/getpost.do?param4=param4
這個action帶有乙個引數param4,
如果用get方法提交,後台無法接收到這個引數;
如果用post方法提交,後台就可以接收到這個引數。
問題原因的簡單解釋:
用get方法提交的url顯示如下:
用post方法提交的url顯示如下:
對於get方式,伺服器端用request.querystring獲取變數的值,對於post方式,伺服器端用request.form獲取提交的資料。
對於get方式,伺服器端用request.querystring獲取變數的值,對於post方式,伺服器端用request.form獲取提交的資料。request從幾個集合取資料是有順序的,從前到後的順序依次是 querystring,form,最後是servervariables。request物件按照這樣的順序依次搜尋這幾個集合中的變數,如果有符合的就中止,後面的就不管了。
一、get和post定義
form元素的method屬性用來指定傳送form的http方法;
使用get時,form資料集被附加到form元素的action屬性所指定的url後面;
使用post時,form資料集被包裝在請求的body中並被傳送。
使用get提交方式,生成url:user.do?loginid=abc
get僅僅是拼接乙個url,然後直接向服務區請求資料,需要提交給伺服器的資料集包含在url中。
使用post提交方式,生成url:user.do
post會把form的資料集,即loginid=abc這個鍵值對包裝在請求的body中,發給伺服器,然後向伺服器請求資料。
二、get和post的區別
1、安全性
如果用get提交乙個驗證使用者名稱和密碼的form,一般認為是不安全的,因為使用者名稱和密碼將出現在url上,進而出現在瀏覽器的歷史記錄中。
顯然,在對安全性有要求的情況下,應該使用post。
2、編碼
get只能向伺服器傳送ascii字元,而post則可以傳送整個iso 10646中的字元。
另乙個是multipart/form-data(用於檔案上傳)只能用於post。
3、提交資料的長度。
ie將請求的url長度限制為2083個字元,從而限制了get提交的資料長度,如果url超出了這個限制,提交form時ie不會有任何反映。
4、快取
由於乙個get得到的結果直接對應到乙個url,所以get的結果頁面有可能被瀏覽器快取,而post一般不能。
5、引用和seo
可以用乙個uri引用乙個get的結果頁面,而post的結果則不能,所以必然不能被搜尋引擎搜到。
最本質的區別:
1、get是用來從伺服器上獲得資料,而post是用來向伺服器上傳遞資料
如果採用post方法,瀏覽器將會按照下面兩步來傳送資料。
首先瀏覽器將action屬性中指定的表單處理伺服器建立聯絡,一旦建立連線之後,瀏覽器就會按分段傳輸的方法將資料傳送給伺服器。
在伺服器端,一旦post樣式的應用程式開始執行時,就應該從乙個標誌位置讀取引數,而一旦讀到引數,在應用程式能夠使用這些表單值以前,必須對這些引數進行解碼,使用者特定的伺服器會明確指定應用程式應該如何接受這些引數。
採用get方法:
瀏覽器會直接與表單處理伺服器建立連線,然後直接在乙個傳輸步驟中傳送所有的表單資料,然後直接在乙個傳輸步驟中傳送所有的表單資料。
2、get將表單中資料的按照variable=value的形式,新增到action所指向的url後面,並且兩者使用「?」連線,而各個變數之間使用「&」連線;post是將表單中的資料放在form的資料體中,按照變數和值相對應的方式,傳遞到action所指向url。
三、正確的使用get和post
當且僅當form是冪等的時候,使用get。
冪等:多次相同的請求產生的***,和一次請求的***相同。
如果提交請求純粹只是從伺服器端獲取資料而不是進行其他操作,並且多次提交不會有明顯的***,應該使用get。
比如:搜尋引擎的查詢(和分頁(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中有乙個文字框,,那麼url會變成insert.jsp?addresswuhan.
form表單中method的get和post區別
一 問題的提出 也就是說post方式提交表單,引數分為兩部分 一部分是action中的引數放在位址列 另一部分是表單中的引數放在請求的頭中 所以所有的資料後台全部能獲得。對於get方式,伺服器端用request.querystring獲取變數的值,對於post方式,伺服器端用request.form...
Form表單中method為get和post的區別
序,form表單中的方法分為get和post,但你都知道他們之間的區別嗎?例子如下,有個form表單。1 method get時,後面的引數param4 param4不會被傳到伺服器,因為瀏覽器在傳送之前,重新拼裝url為http 2 如果method post時,瀏覽器會將getpostservl...
表單form裡的method屬性post get
表單form裡有個method屬性,method屬性有兩個值分別為post和get 這個屬性如果沒有指定時預設為get post和get的區別 post傳遞的資料量大,而get傳遞的資料量小 下面是網上搜到的兩者的區別 1.get是從伺服器上獲取資料,post是向伺服器傳送資料。2.get是把引數資...