报错问题:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
原因:
这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含
1.英文字母(a-zA-Z)
2.数字(0-9)
3.-_.~4个特殊字符
4.所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有”{“不在RFC3986中的保留字段中,所以会报这个错。
解决办法:
修改tomcat配置文件server.xml(路径:项目\Servers\Tomcat v8.5 Server at localhost-config\server.xml),在Connector配置项添加
relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%"
这句话就好了,即下面图片中方块中代码。
<Connector URIEncoding="UTF-8" acceptCount="1000" compressableMimeType="text/html,text/xml,text/javascript,application/javascript,text/css,text/plain,text/json" compression="on" compressionMinSize="20480" connectionTimeout="30000" disableUploadTimeout="true" enableLookups="false" maxParameterCount="-1" maxPostSize="-1" maxThreads="1000" noCompressionUserAgents="gozilla,traviata" port="8082" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"
relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%" />