(本文僅作個人記錄只用比較啰嗦,重點只看紅字部分即可)
Test.jsp
請求test1.jsp
IE11環境下,get請求url最多4096個字節;
請求的是http://localhost:9080/test1.jsp?name=傾不見黃河之水天上來奔流到海不復回君不見高堂明鏡悲白發朝如青絲暮成雪……(太長省略)
(君不見黃河之水天上來。。。不要在意這些細節)
經測試:
url計算長度時,對應的字符串是:
/test1.jsp?name=傾不見黃河之水天上來奔流……(太長省略)
關於漢字部分的編碼:
通過js中encodeURI后,每一個漢字都進行轉換成字符串,如:
“傾“的UTF-8編碼是E580BE
encodeURI('傾')后變成:%E5%80%BE
encodeURI(encodeURI('傾'))后變成:%25E5%2580%25BE
即:url中的每一個漢字在encodeURI編碼一次后占用成9個字節,在encodeURI編碼兩次后占用成15個字節!
這樣,url前面的/test1.jsp?name=占用16個字節,還剩4096-16=4080個字節可用,換算成漢字就是:4080÷15=272個漢字。
與test1.jsp中取得的name這個參數的值的字節數816,漢字數816÷3=272一致;
另外:如果通過encodeURI轉碼導致url超過長度時,有可能最后一個漢字,比如“傾”轉碼成“%E5%80%BE”時,若url對應長度的4096個字節處於“%E5%80%BE”中間位置時,會發生截斷處理,這將會導致“傾”這個漢字在test1.jsp中通過URLDecoder.decode時發生解碼異常,所以在ie11下get傳參時,url長度盡量不要太接近到4096,要保證最后一個漢字decode后不因為長度截斷。