關於URL,POST傳遞值的大小限制問

2021-08-09 07:30:10 字數 1528 閱讀 5343

1、第乙個問題:url引數上限的提法準確嗎?上限是多少?

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、第二個問題:為什麼post時資料有限制?限制是128k嗎?

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之前沒有這些限制。

3、第三個問題:現在用ajax進行post提交,需要傳遞的這個字串很長,大概有116萬個字元長度,每次都傳遞不過去,服務端那邊接受的值是null,當我擷取前90w個字元進行傳遞的時候,就能傳遞過去了

不是說post傳遞沒有大小限制的嗎?

問題找到了,post傳遞沒問題,是servlet那邊的問題

因為那邊,我是採用request.getparameter來獲取的引數,因為map集合裝不了116w那麼大的字串,是map集合崩潰了

所以在servlet那邊,改用request.getinputstream()流來讀取就沒事了更多0

關於java中的值傳遞

值傳遞 本質是賦值,是把實際引數賦值給形式引數的過程。傳值 基本資料型別和string以及string的包裝型別,是值 value 傳遞。形參改變,實參不改變。傳址 int a 3 int b b a 傳值 賦值 b 5 system.out.println a string a abc strin...

關於vue data 值傳遞的理解

data 打樁輸出 console.log this is form2 console.log form2 延時變更變數物件 settimeout 5000 返回物件 return 固定值傳遞,當頁面首次載入時,data中會按順序執行 定義物件變數 打樁輸出 延時變更物件 返回物件 且只執行一次 與...

關於C 值型別,引用型別,值傳遞,引用傳遞

說到引數傳遞,必須得弄清值型別和引用型別 為了容易表達,我暫且命名存放在堆中的內容為堆中物件,存放在棧上的內容為棧中物件。值型別存放在棧中,直接訪問。如果有 int a 0 int b a 就產生了兩個棧中物件。引用型別需要在堆中顯式分配,且不能直接訪問,需要在棧中分配乙個棧中物件 c 叫指標,c ...