tomcat升級 URL中包含了非法字符訪問400 錯誤 The valid characters are defined in RFC 7230 and RFC 3986


1、因公司項目版本使用JDK及tomcat老舊,造成無法使用很多新引用中間件,所以提出升級JDk,以及tomcat

升級之后訪問某些頁面時出現一下報錯:

問題原因定位到 tomcat7及以上版本會出現:URL中包含了非法字符 

2、解決方式:

 (1)url攔截量少的情況下,可以通過修改請求URL編碼轉化特殊字符,達到不被tomcat攔截效果

  • encodeURI() 用來encode整個URL,不會對下列字符進行編碼:+ : / ; ?&。它只會對漢語等特殊字符進行編碼 
  • encodeURIComponent()  用來enode URL中想要傳輸的字符串,它會對所有url敏感字符進行encode 

  這里需要注意的一點,對於get請求的中文亂碼問題,如果你沒有在tomcat配置文件中設置編碼格式,天真的

  想用request.setCharacterEncoding(“UTF-8”)來在后端設置后端的解碼格式,這種方式對於get請求是無效的。

  同時有的小伙伴可能會想我們可以在項目的web.xml中設置編碼過濾器。抱歉這種方式對於get請求也是無效的。
 (2)如果攔截情況多則修改tomcat配置文件service.xml如下:

   relaxedQueryChars="[^]"

  這個配置,"[^]"表示請求url中 ^字符不被攔截,如果還有別的符號需要過濾,逗號隔開即可

  

3、另附RFC 3986 文檔規定,Url中只允許出現的字符

英文字母(a-z,A-Z)、
 
數字(0-9)、
 
- _ . ~ 4個特殊字符
 
保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]

 


免責聲明!

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



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