报错 Invalid character found in the request target

(1)执行导出 EXCEL 文件的时候,报错:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

 

(2)通过 F12 得知,错误码为 400,即:你访问的页面域名不存在或者请求错误。

主要分为两种。

1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。

2、请求参数有误。

本地跑的项目域名肯定是存在的,问题大概率出现在请求参数有误

 

(3)为了验证请求参数的问题,我在导出文件的方法开头,打印出 path 和 fileName。

按理来说,应该是:

path=D:\basic2\classes\artifacts\basic2_war_exploded\20210429165214

fileName=wszlbbTwo0.xls

然而,实际上控制台什么都没打印出来,连这个方法都没进去,这就确定了在解析请求参数的时候就报错了

(4)面向搜索引擎得知,

从错误日志中看到 Error parsing HTTP request header

负责解析 http 请求的是 org.apache.tomcat.util.http.parser.HttpParser,它对请求 URL 中对字符做了限制,具体代码如下:

IS_NOT_REQUEST_TARGET[] 中定义了一堆 not request target

if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || 
   i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) {
                IS_NOT_REQUEST_TARGET[i] = true;
}

 

转换过来就是以下字符(对应10进制ASCII),也就是URL中不能包含的特殊字符:

  • 键盘上那些控制键:(<32或者=127)
  • 非英文字符(>127)
  • 空格(32)
  • 双引号(34)
  • #(35)
  • <(60)
  • >(62)
  • 反斜杠(92)
  • ^(94)
  • TAB上面那个键,~(96)
  • {(123)
  • }(124)
  • |(125)

(5)解决方案:

1、在 conf/catalina.properties 中添加:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

 不幸的是,requestTargetAllow 只能配置 |、{、} 允许这三个字符,对于其他的 (例如" < > [ \ ] ^ ` { | } .),在请求时,仍然拦截。如果你仅需要使用这三个字符,配置到此就OK了。重启tomcat,rebuild工程再启动,就能正常使用了。

2、在 conf/server.xml 中的 <Connector> 节点中,添加2个属性:

relaxedPathChars="|{}[]/\,"
relaxedQueryChars="|{}[]/\,"

这2个属性,可以接收任意特殊字符的组合,根据需要可以自行增减。此处我需要的斜杠和反斜杠。

(6)完美运行。

导出文件成功。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值