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個特殊字符
保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]