springboot 1.3.5升級1.5.9后 默認使用tomcat 8.5版本 get請求報400 異常信息為 The valid characters are defined in RFC 7230 and RFC 3986


1.springboot 1.3.5升級1.5.9后 默認使用tomcat 8.5版本而之前用的是tomcat7    get請求報400 異常信息為 The valid characters are defined in RFC 7230 and RFC 3986

 

2.注意這里說明了,只是get請求。post的請求沒問題

-------解決辦法

將get請求的參數urlencode一下 

      

param = encodeURIComponent(param);

 

PS:

1.RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。

2.tomcat 8.0對URL做出了一些更嚴格的限制

 所以,很多get請求包含了特殊字符(請求數據格式定義的是json的(contentype/json)) 在低版本的容器是可以的且后台能夠自動識別解析url的json格式數據,

      但是到了8.0及以上版本的tomcat容器后就不行了。

-----很多人嘗試給tomcat降級,因為很多從jdk7升到jdk8的朋友,會為了容器校驗嚴格的這個問題考慮使用低版本不報錯的容器(8.0.2-8.0.3好像是可以)。

      但這個我認為也不是最終解決辦法,兩個原因:1.服務容器很難避免為了適應快速的技術發展而進行升級,只是時間問題 且進行轉碼也對明文信息起到了保護作用。

                                                                                  2.現在容器的api和spring的api都是自動對url進行decode,所以不用擔心還要向以前一樣修改后台代碼.z這一點很贊。

 

------我也參考了如下朋友的帖子

http://blog.csdn.net/vickyway/article/details/46375971


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM