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

文件下载功能,本地跑是正常的,部署到服务器后下载报错
在这里插入图片描述
大概意思为:在请求目标中找到无效字符,有效字符在RFC 7230和RFC 3986中定义。
就是说http请求的url中有非法字符,我请求的url中有?,\,/,还有中文字符。
经查找
(可参考:https://blog.csdn.net/qq_32365919/article/details/82055800)
(可参考:https://blog.csdn.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.csdn.net/luojian520025/article/details/9139293

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值