Tomcat7.0.77 版本出现 The valid characters are defined in RFC 7230 and RFC 3986问题
来源:7-4 新增部门、部门层级树、更新部门接口自测

TenWords
2017-12-09
老师您好,在执行:curl http://localhost:8081/sys/dept/save.json\?name\=技术部\&seq\=1\&remark\=技术部
报错如下:
INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
经查,是由于在tomcat 7.0.73添加对http请求url的规范限制,不允许使用包含未编码的花括号的url进行请求。
网上查找了解决办法:可以修改tomcat 配置文件 catalina.properties
1. tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
或
2. org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
重启后问题仍然存在,URLEncode编码又不会,主要是找不到在哪儿
请问一下,您的环境使用的tomcat版本,我直接保持一致,谢谢。
3回答
-
你好,我本地的tomcat版本和你很相似,由于其他学员也遇到过类似的问题,他们基本上都是代码细节上写的有点问题,我建议你可以在这里把出问题的请求的前后端代码截屏发一下,或者在qq群里找我发下代码让我看看。
112017-12-09 -
Geely
2017-12-18
赞赞赞
10 -
TenWords
提问者
2017-12-09
谢谢老师,如果是代码问题,我再自己核一遍代码。顺便把问题现象贴出来,方便后续的同学学习参考。
我的现象是这样的,如果使用控制台命令行,把中文换成英文是可以成功请求的,并且写入数据库正常。但是URL请求中有中文字符,前端控制台无返回,控制台设置中英文UTF-8字符集都尝试过,还是一样的情况,我打断点看过,curl调用后,压根没有进入程序,访问请求的时候,就直接抛异常了。我以为是tomcat的问题。
URL中使用中文字符,访问控制台无返回值,后台抛异常:
URL中使用英文字符,访问请求前后台都正常:用chrome浏览器访问,中英文都可以,但是使用中文的插入数据库后是乱码。前端返回正常,如图:
###代码截图###:
152019-03-08
相似问题