之前知道get請求對url請求長度有限制,post請求沒有限制。今天在做程序的時候遇到了這個問題。
場景:我需要將前端生成的Svg圖片轉化base64生成字符串傳入後臺,後臺根據字符串解碼生成到PPT裏面。
附:前端將svg生成圖片的工具:saveSvgAsPng.js第三方js。https://github.com/exupero/saveSvgAsPng,後端將數據圖片生成PPT使用的是POI。
參數傳遞方式
前端將svg生成base64字符串,然後以form的post方式提交,並且將每個svg的base64字符串生成一個hidden的input。
完成了開發本地測試沒問題。發到測試環境用戶測試時,發現下載PPT下不下來。瀏覽器提示如下:
本地調試發現在用httprequest拿參數時,爲空。
連忙去點擊其他下載看看,結果都能下載下來,ok。百思不得其解,於是去看了看這個request的圖片的數量,發現一共有62個,想了想會不會是post傳輸數據的限制,於是我修改數據減少圖片的數量,當減少到45個的時候,PPT下載下來了。這麼看來確實是psot請求限制的問題。
查了相關資料,關於http get和post,本身http協議是沒有限制其傳輸數據的大小的,主要在於瀏覽器與後臺server的限制。
get請求參數限制
下面get請求瀏覽器最大處理能力說明.
Microsoft Internet Explorer (Browser)
IE瀏覽器對URL的最大限制爲2083個字符,如果超過這個數字,提交按鈕沒有任何反應。
Firefox (Browser)
對於Firefox瀏覽器URL的長度限制爲65,536個字符。
Safari (Browser)
URL最大長度限制爲 80,000個字符。
Opera (Browser)
URL最大長度限制爲190,000個字符。
Google (chrome)
URL最大長度限制爲8182個字符。
Apache (Server)
能接受最大url長度爲8,192個字符。
Microsoft Internet Information Server(IIS)
能接受最大url的長度爲16,384個字符。
post請求參數限制
post請求理論上沒有限制,主要是後臺服務器做的限制,比如在Tomcat下取消POST大小的限制(Tomcat默認2M).
打開tomcat目錄下的conf目錄,打開server.xml 文件,修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxPostSize="0" />
maxPostSize="0" (設爲0是取消POST的大小限制)。
關於maxPostSize在不同tomcat版本下還有不一樣,tomcat7.0.63之前該值設置0或者負數代表不限制,tomcat7.0.63之後設置0會導致數據提交不到後臺,設置負數則代表不限制post參數大小,慎之!我的版本是7.0.61,所以設置爲0
修改之後,成功下載!
參考:https://www.cnblogs.com/joechinochl/articles/6047145.html
戰如熊虎,不惜屈命!