tomcat 请求出现RFC 7230 and RFC3986的错误,解决办法
Posted 摘星族
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat 请求出现RFC 7230 and RFC3986的错误,解决办法相关的知识,希望对你有一定的参考价值。
问题描述
今天在测试接口的是否使用tomcat启动服务,然后通过get请求去测试接口,页面返回报的错误是400。
tomcat中错误如下图所示:
请求参数为 location=[{"lng":108.871597,"lat":34.194412}]
很明显,在location的参数为json串
查询日志发现是有些地址直接被tomcat认为存在不合法字符,返回HTTP 400错误响应
测试问题
通过junit单元测试发现接口方面并没有错误,而且日志显示的是不合法字符,就针对于tomcat进行测试,将服务放在了jetty服务器中,接口显示正常,所以肯定是tomcat有问题
问题解决
这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有"{"不在RFC3986中的保留字段中,所以会报这个错。
…/conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},表示把{}放行
欢迎关注:
以上是关于tomcat 请求出现RFC 7230 and RFC3986的错误,解决办法的主要内容,如果未能解决你的问题,请参考以下文章
springboot 内置默认启动tomcat容器遇到The valid characters are defined in RFC 7230 and RFC 3986”
The valid characters are defined in RFC 7230 and RFC 3986错误解决方式
The valid characters are defined in RFC 7230 and RFC 3986报错处理
The valid characters are defined in RFC 7230 and RFC 3986报错处理
The valid characters are defined in RFC 7230 and RFC 3986
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC(