springboot 1.3.5升級1.5.9後 預設使用tomcat 8.5版本 get請求報400 異常資訊為 The valid characters are defined in RFC 7230 and RFC 3986

來源:互聯網
上載者:User

標籤:問題   轉碼   資料   識別   低版本   英文   character   get   容器   

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

springboot 1.3.5升級1.5.9後 預設使用tomcat 8.5版本 get請求報400 異常資訊為 The valid characters are defined in RFC 7230 and RFC 3986

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.