访问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=[]|{}^\`