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回答

Jimin

2017-12-09

你好,我本地的tomcat版本和你很相似,由于其他学员也遇到过类似的问题,他们基本上都是代码细节上写的有点问题,我建议你可以在这里把出问题的请求的前后端代码截屏发一下,或者在qq群里找我发下代码让我看看。

1
1
TenWords
非常感谢!
2017-12-09
共1条回复

Geely

2017-12-18

赞赞赞

1
0

TenWords

提问者

2017-12-09

谢谢老师,如果是代码问题,我再自己核一遍代码。顺便把问题现象贴出来,方便后续的同学学习参考。

我的现象是这样的,如果使用控制台命令行,把中文换成英文是可以成功请求的,并且写入数据库正常。但是URL请求中有中文字符,前端控制台无返回,控制台设置中英文UTF-8字符集都尝试过,还是一样的情况,我打断点看过,curl调用后,压根没有进入程序,访问请求的时候,就直接抛异常了。我以为是tomcat的问题。
//img.mukewang.com/szimg/5a2b44db0001c60e10580290.jpg

URL中使用中文字符,访问控制台无返回值,后台抛异常:

//img.mukewang.com/szimg/5a2b406900015fda07740172.jpg

//img.mukewang.com/szimg/5a2b406900014fc310100233.jpg
URL中使用英文字符,访问请求前后台都正常:

//img.mukewang.com/szimg/5a2b43cc0001898f09480208.jpg

//img.mukewang.com/szimg/5a2b43cc0001dba108410107.jpg

用chrome浏览器访问,中英文都可以,但是使用中文的插入数据库后是乱码。前端返回正常,如图:

//img.mukewang.com/szimg/5a2b3eb10001c25c05790205.jpg
//img.mukewang.com/szimg/5a2b3ed80001f18c07650133.jpg

###代码截图###:

//img.mukewang.com/szimg/5a2b41c20001822810470185.jpg

//img.mukewang.com/szimg/5a2b41c20001cce611640702.jpg


1
5
Jimin
回复
慕哥5843795
这个问题,基本上都是代码根本没走到后端,问题出现在前端或者服务器解释数据上,你请求听着是没问题,那么基本上问题还是出现在你使用的tomcat上。如果你确定改的位置没问题,那么我只能建议你换个tomcat试一下了。没走到后端代码,那么就只能是本地环境有问题了,只能你去调整你的本地环境了。(你修改完不好使,有可能是改的文件也有问题,这只是个猜测)
2019-03-08
共5条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2227 学习 · 1334 问题

查看课程