表单PostGet两个长度限制问题的分析
生活随笔
收集整理的這篇文章主要介紹了
表单PostGet两个长度限制问题的分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、問題起因 在某項目釋放后Bug統計的附件《釋放后問題》里有: ?
做為一種經驗積累,這些問題、原因及解決辦法將被列入Checklist,那么: 第一個問題:URL參數上限的提法準確嗎?上限是多少? 第二個問題:為什么POST時數據有限制?限制是128K嗎? ? 二、問題分析 1、第一個: 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方法。 結論(寫入Checklist): 對使用GET方法提交數據時,在IE環境下,需要考慮URL長度2083字節的限制。? 2、第二個: 1)理論上講,POST是沒有大小限制的。HTTP協議規范也沒有進行大小限制。 2)“POST數據量存在128K的大小限制”不夠準確,POST數據是沒有限制的,起限制作用的是服務器的處理程序的處理能力。 3)對于ASP程序,Request對象處理每個表單域時存在100K的數據長度限制。但如果使用Request.BinaryRead則沒有這個限制。對于需要處理超過100K表單域數據的解決辦法,請參考后面的[參3]。 4)由這個延伸出去,對于IIS 6.0,微軟出于安全考慮,加大了限制[參4]。我們還需要注意: IIS 6.0默認ASP POST數據量最大為200KB,每個表單域限制是100KB。 IIS 6.0默認上傳文件的最大大小是4MB。 IIS 6.0默認最大請求頭是16KB。 IIS 6.0之前沒有這些限制。 建議: 1)弄清楚運行環境的默認設定值有助于你的設計及對出現的問題做快速的解決。 2)應該考慮服務器版本。各個版本的IIS對這些參數的默認設定都不一樣,有必要的話,找資料整理出一份對照表。這樣開發與測試時都有個參考。 3)IIS 6.0的這些限制實際只是它的默認設定值而已,實際應用環境你可以修改它們。 在WINNT\system32\inetsrv\MetaBase.xml里默認定義了:
??????? AspBufferingLimit="4194304"???????????對應于上傳文件最大大小
??????? AspMaxRequestEntityAllowed="204800" ???對應于POST最大數據量 ...? 結論(寫入Checklist): 使用ASP時,需要考慮POST表單每個域一般讀取處理時有100KB的限制。充分考慮是否使用Request.Binary。? 參考資料: 1、Maximum URL Length Is 2,083 Characters in Internet Explorer? 2、Hypertext Transfer Protocol--HTTP/1.1 3、PRB: Error "Request Object, ASP 0107 (0x80004005)" When You Post a Form 4、IIS 6.0 Troubleshooting [Client Requests Error-out or Time-out一節]
| 問題 | 原因 | 分析 | 備注 |
| CSV處理時,如果處理的主題數過多,發生URL參數上限的錯誤; | 可變長度的參數通過URL方式傳遞,會造成這種潛在的錯誤發生。 | 1、屬于2次發生問題,開發方面沒有及時通過checklist等方式向組員傳達相關注意事項; 2、測試時沒有作大批量數據的測試; | 1、作為經驗添加至CheckList中,加強組內共享、檢查的效果; 2、加強測試點是否完備的檢查,重點關注對開發方面共性問題的測試; |
| 通過對模塊原有GUI狀況確認,進行CSV輸出時,輸出結果很大的場合,CSV文件的內容不能輸出。 | 沒有考慮到POST數據量存在128K的大小限制。 | 這屬于新問題,以前從未遇見過,也沒有進行過大規模的數據量測試 | 已將此類檢查列出CheckList中 |
??????? AspBufferingLimit="4194304"???????????對應于上傳文件最大大小
??????? AspMaxRequestEntityAllowed="204800" ???對應于POST最大數據量 ...? 結論(寫入Checklist): 使用ASP時,需要考慮POST表單每個域一般讀取處理時有100KB的限制。充分考慮是否使用Request.Binary。? 參考資料: 1、Maximum URL Length Is 2,083 Characters in Internet Explorer? 2、Hypertext Transfer Protocol--HTTP/1.1 3、PRB: Error "Request Object, ASP 0107 (0x80004005)" When You Post a Form 4、IIS 6.0 Troubleshooting [Client Requests Error-out or Time-out一節]
轉載于:https://www.cnblogs.com/goody9807/archive/2008/11/05/1327453.html
總結
以上是生活随笔為你收集整理的表单PostGet两个长度限制问题的分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中raw函数_Python
- 下一篇: 去哪儿对垒携程 在线旅游静悄悄的革命