解决 tomcat: the valid characters are defined in RFC 7230 and RFC 3986

文件下载功能,本地跑是正常的,部署到服务器后下载报错
解决 tomcat: the valid characters are defined in RFC 7230 and RFC 3986
大概意思为:在请求目标中找到无效字符,有效字符在RFC 7230和RFC 3986中定义。
就是说http请求的url中有非法字符,我请求的url中有?,\,/,还有中文字符。
经查找
(可参考:https://blog.****.net/qq_32365919/article/details/82055800)
(可参考:https://blog.****.net/SnailMann/article/details/72858805)
(1)RFC 3986文档规定,Url中只允许包含英文字母(a-z,A-Z)、数字(0-9)、- _ . ~ 4个特殊字符以及所有保留字符。
(2)RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]
由此我知道是我的url中符号违反了RFC 3986和RFC 7230。
而且跟tomcat版本有关:tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
解决方案
综上,有3种解决方案:
(1)使用低版本的tomcat;
(2)对url的特殊字符进行转义
(3)修改tomcat配置文件
我先用了第三个方法:
找到tomcat下的/conf/catalina.properties文件,在该文件中找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=|  ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|?/,然后去掉这句话的注释。
并没有起作用
后来改用第二个办法,先对url进行编码,将其编码后的地址传给前端,等下载时再进行解码
最终下载成功。
编码解码可参考: https://blog.****.net/luojian520025/article/details/9139293