HTTP 400,The valid characters are defined in RFC 7230 and RFC 3986

本文探讨了在访问TongWeb应用时遇到的HTTP400错误,源于URL参数中包含非法字符。解决方法涉及配置relaxedPathChars和relaxedQueryChars,以及不同版本TongWeb的配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

访问TongWeb上的应用返回http 400错误,或后台日志报如下异常:

java.lang.IllegalArgumentException: Invalid character found in the request target [/web/?aa=|ddd]. The valid characters are defined in RFC 7230 and RFC 3986
        at com.tongweb.connector.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:491)
        at com.tongweb.connector.http11.Http11Processor.service(Http11Processor.java:261)
        at com.tongweb.connector.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

原因:

       RFC 3986规范定义了URL中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而传入的参数中有”{“,”|“等不在RFC3986中的保留字段中,所以会报这个错。

解决办法:

配置两个参数:

参数含义
relaxedPathCharsURI  path 上允许的特殊字符,可设置值为[]|{}^\`
relaxedQueryCharsURI query 允许的特殊字符,可设置值为[]|{}^\`

配置方式:

1. TongWeb7.0.4.2及之后版本的企业版

      只有http通道设为BIO时才有该问题 (特别说明: TongWeb7.0.4.9_M2, M3版本NIO2也有该问题),只返回http 400, 日志中不会有:The valid characters are defined in RFC 7230 and RFC 3986提示。在http通道中配置值:[]|{}^\`, 若配置值为*,则忽略所有字符。

2. TongWeb7.0.C.2_P2及之后版本

       在tongweb.xml的http配置属性中设置,如:

 <http-listener  port="8088"     io-mode="nio" >
   <property name="relaxedPathChars" value="[]|{}^\`"/>
   <property name="relaxedQueryChars" value="[]|{}^\`"/>
 </http-listener>

 3. TongWeb7.0.E.1及之后版本

在spring boot配置文件中增加这两个参数:

server.tongweb.relaxed-path-chars=[]|{}^\`
server.tongweb.relaxed-query-chars=[]|{}^\`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值