当前位置: 代码迷 >> 综合 >> HTTP 400,The valid characters are defined in RFC 7230 and RFC 3986
  详细解决方案

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

热度:76   发布时间:2023-12-12 04:53:55.0

访问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中的保留字段中,所以会报这个错。

解决办法:

配置两个参数:

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

配置方式:

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

      只有http通道设为BIO时才有该问题,只返回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=[]|{}^\`

  相关解决方案