寫了個介面,在測試訪問的時候,需要傳json串,但是後臺報錯了 當前使用的tomcat版本:apache-tomcat-8.0.53 方案二內容引用來源:https://blog.csdn.net/wojiushiwo945you/article/details/72865427 Tomcat源碼分 ...
寫了個介面,在測試訪問的時候,需要傳json串,但是後臺報錯了
The valid characters are defined in RFC 7230 and RFC 3986
當前使用的tomcat版本:apache-tomcat-8.0.53
一、方案一(修改後被源碼覆蓋,無法修改文件): 在tomcat/conf/catalina.properties中添加下麵這句話 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 在tomcat/conf/service.xml中在Connector標簽中添加URIEncoding="UTF-8"、relaxedQueryChars="[]|"、relaxedPathChars="[]|" 而我使用的tomcat8中catalina.properties文件中已經有了這句話,打開註釋即可。 清理tomcat後,重啟後還是無效,打開catalina.properties和service.xml查看,修改的內容自動恢復以前的狀態,重試多次也如此,修改過用戶操作文件許可權也還是這種情況,真的很納悶!!!
二、方案二(修改後重啟tomcat無效)
在tomcat的vm中添加:-Dcatalina.config="J:\DevelopTool\apache-tomcat\apache-tomcat-8.0.53\backup\catalina.properties"
看網上的Tomcat源碼分析-CatalinaProperties類
這個類很簡單,就是一個屬性獲取的公共類。但是用法卻很巧妙,代碼相當優雅,所以忍不住想要再說說這個類。
它的功能是管理catalina.properties類文件中的配置屬性獲取,只有一個方法getPropertity(String name).
我認為這個類的高明之處就是充分使用了配置屬性,配置文件路徑可配置,即流程圖的第一個操作,是從環境變數中獲取的配置文件路徑。如果我通過VM參數配置-Dcatalina.config=”xxx/myfile/catalina.properties”的話,就改變了它的預設的配置文件。
方案二內容引用來源:https://blog.csdn.net/wojiushiwo945you/article/details/72865427
Tomcat源碼分析-CatalinaProperties類
引用來源:https://blog.csdn.net/guo20082200/article/details/80558151
分析原因:
第一種方案還不確定行不行,第二種方案試驗不行。經過第二種方案的閱讀發現,第一種方案沒有成功的原因是tomcat會生成catalina.properties
文件覆蓋你自己修改後的catalina.properties文件,於是我先用tomcat的clean將項目編譯成class文件,然後修改catalina.properties後
直接啟動服務,然後訪問介面成功了。
第二波bug的出現
由於參數中json串過大(20kb左右),請求介面的時候又報出了錯誤
http post request header is too large
在tomcat/conf/service.xml中在Connector標簽中添加maxHttpHeaderSize ="102400"和maxPostSize="-1",如下
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="UTF-8"
relaxedQueryChars="[]|"
relaxedPathChars="[]|"
maxHttpHeaderSize ="102400"
maxPostSize="-1"/>
註意: 加maxPostSize="0"(POST數據大小限制-1或者0表示沒有限制),我加了之後,後端一直收不到前端ajax發送過來的數據,
後端接收的數據一直是NULL,後來查找資料發現tomcat的不同版本maxPostSize設置值不同,有的是小於0有的是等於0就可以,
所以自行測試修改後再次啟動服務後,介面能夠正常訪問。
第三波bug的出現
介面調試完成後,部署到測試環境時(環境中的tomcat均已修改),訪問介面又報出錯誤
Nginx 414 Request-URI Too Large
原因是請求頭的長度超出了nginx限制,在nginx.conf裡面把這兩個緩存加大就行
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
打開文件
vim /usr/local/nginx/conf/nginx.conf
按i進行編輯,並添加上面兩行代碼,按Esc退出編輯,按:wq!保存
進入nginx可執行目錄sbin下
cd /usr/local/nginx/sbin/
重啟nginx
./nginx -s reload
再次訪問介面的時候就正常了。