今天碰到個很嚴重的表單get方式提交資料過長的問題.
這個問題是客戶現場發現的,跟銀行互動的時候從銀行返回的資料不正常.奇怪的是在ie7執行正常,在ie6就出問題了.
本來銀行返回的內容應該是正常的資料.但是分析了資料後,發現他們犯了個很致命的錯誤,get方式提交的url太長了,
我粗略的看了看,至少有4000個位元組,簡直太離譜了.
我曾今也犯過get方式的錯誤,用struts的dispatchaction的時候,如果表單的method採用預設的方式(即get方式),dispatchaction的"method=***"會被get覆蓋掉.本意是想傳www.***.com/aaa?mehtod=init,實際傳了只是:www.***.com/aaa.這種情況,採用post就沒問題了.
google了些資料
1)url不存在引數上限的說法。該問題實際是ie對url有長度限制的問題。
2)http協議規範也沒有對url長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。ie對url長度的限制是2083位元組(2k+35)。對於其他瀏覽器,如netscape、firefox等,理論上沒有長度限制,其限制取決於作業系統的支援。[參1]
3)「可變長度的引數通過url方式傳遞」實際是說提交表單時使用了get方法,而不是post方法。造成這種潛在錯誤的是使用get方法提交表單資料。因為get方法將資料放在url裡傳遞給伺服器處理。
4)注意這個限制是整個url長度,而不僅僅是你的引數值資料長度。
5)既然是ie對url長度的限制,那麼不管是get方法還是post方法都存在這個限制。
(關於form的get和post方法具體內容請參考相關資料[參2])
建議:
1)了解應用程式所在的環境,如web應用的瀏覽器、伺服器環境,了解其特定的引數限制情況。
2)提交複雜資料盡量使用post方法。注意form不寫method屬性時預設是使用get方法。
使用GET方式提交的表單遇到的問題
經常使用表單,一直使用的都是post方式,post將資料封裝到請求體中,相對於get安全一點 而post處理中文編碼問題也比get簡單 get需要將url編碼,後台接受到後還需要解碼 今天我想要使用get方式提交表單,卻遇到了引數丟失的問題 姑且這樣稱呼這個問題吧 並不是get方式表單提交的資料就會...
get表單提交亂碼問題
表單中使用get方法提交時 後台擷取時出現亂碼 當時試用了post提交亂碼的問題 新增了 request.setcharacterencoding utf 8 response.setcharacterencoding utf 8 response.setcontenttype text html ...
表單的提交方式POST和GET
post和get都是表單屬性method的可選值,method的預設值為get,兩者的主要區別在於 1.在客戶端,get方式在通過url提交資料,提交後在位址列中的位址如圖1.4.3所示。圖1.4.3 get方式提交表單後的位址列 而post提交後地欄不變,如圖1.4.4所示。圖1.4.4 post...