GET與POST可傳遞的最大值到底是多少?
前日,看到這個問題了。 沒有深入了解。我的常識里面get最大傳遞的值為256b,post 是2M。這是很久以前不知在哪看到的。
於是又百度一下。看到兩篇文章裝過來看看:
淺談 HTTP中Get與Post的區別
GET方式傳值的最大長度
都有些道理。引用其中一些觀點:
get
首先是"GET方式提交的數據最多只能是1024字節",因為GET是通過URL提交數據,那么GET可提交的數據量就跟URL的長度有直接關系 了。而實際上,URL不存在參數上限的問題,HTTP協議規范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。 注意這是限制是整個URL長度,而不僅僅是你的參數值數據長度。
【get方式提交數據的大小,http協議並沒有硬性限制;而是與瀏覽器及服務器、操作系統有關。第二篇文章里,就有談到用apache測試,使用get方式,url最長可達8167b。其中跟帖留言中還有談到代理的因素在里面,可能url太長還沒到服務,就已經被代理拒絕掉了。第一篇的留言討論很能學到東西哦~ 】
post
理論上講,POST是沒有大小限制的,HTTP協議規范也沒有進行大小限制,說“POST數據量存在 80K/100K的大小限制”是不准確的,POST數據是沒有限制的,起限制作用的是服務器的處理程序的處理能力。
對於ASP程序,Request對象處理每個表單域時存在100K的數據長度限制。但如果使用Request.BinaryRead則沒有這個 限制。
由這個延伸出去,對於IIS 6.0,微軟出於安全考慮,加大了限制。我們還需要注意:
1).IIS 6.0默認ASP POST數據量最大為200KB,每個表單域限制是100KB。
2).IIS 6.0默認上傳文件的最大大小是4MB。
3).IIS 6.0默認最大請求頭是16KB。
IIS 6.0之前沒有這些限制。[見參考資料5]
所以上面的80K,100K可能只是默認值而已(注:關於IIS4和IIS5的參數,我還沒有確認),但肯定是可以自己設置的。由於每個版本的 IIS對這些參數的默認值都不一樣,具體請參考相關的IIS配置文檔。
【post方式,傳送數據最大理論上沒有限制,取決於服務器設置和內存大小。】