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

一、因公司項目版本使用JDK及tomcat老舊,形成沒法使用不少新引用中間件,因此提出升級JDk,以及tomcatnode

升級以後訪問某些頁面時出現一下報錯:web

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

二、解決方式:tomcat

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

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

  這裏須要注意的一點,對於get請求的中文亂碼問題,若是你沒有在tomcat配置文件中設置編碼格式,天真的url

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

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

   relaxedQueryChars="[^]" xml

  這個配置,"[^]"表示請求url中 ^字符不被攔截,若是還有別的符號須要過濾,逗號隔開便可中間件

  

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

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