当前位置: 首页 > 编程笔记 >

tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)

文国发
2023-03-14
本文向大家介绍tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986),包括了tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)的使用技巧和注意事项,需要的朋友参考一下

1.情景展示

  tomcat 日志时不时会报出如下异常信息,到底是怎么回事?

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.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

  页面无法打开

2.原因分析  

  意思是:请求头中包含了 RFC 7230 and RFC 3986规范中定义的非法字符,在这种情况下就会导致页面报400异常。 

  原因就是:tomcat的版本过高造成的,网上说,tomcat高于 7.0.73的版本,添加了对于http头(请求头)的验证。

  get请求,即问号传参,就是只有请求头,没有请求体

  RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

  RFC3986中指定了以下字符为保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]

  同时RFC 3986规范在tomcat7.0.73版本中就已经提出了,RFC 7230也是对前者的一些补充或者说是完善,所以在tomcat7.0.73及以上版本都会有这种问题。 

  说明:这种情况,只在IE浏览器下会出现,因为IE浏览器不会对中文参数进行编码,而其它类型的浏览器会默认自动对中文进行编码。

3.解决方案

  方法一:降低tomcat版本;

  经过测试发现,网上关于tomcat的最高版本要求描述有误,不是低于7.0.73就可以。

  我下载了一个tomcat7.0.70,运行项目后,还是会字符集的错误,导致网页无法打开。

  但是,我测了tomcat7.0.61,完美正常运行项目,控制台不再报错,网页可以正常打开了。

  64位下载地址:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61-windows-x64.zip

  32位下载地址:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61-windows-x86.zip

  方法二:将get请求改为post请求;(推荐使用)

  方法三:get请求(问号传参)

  使用URIEncoder()函数,将中文进行编码

以上就是tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)的详细内容,更多关于tomcat 异常解决的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 我得从7Java执行环境切换 jsp文件:/index中的第427行出现错误。jsp PageContextImpl类型中的方法proprietaryEvaluate(String、Class、PageContext、ProtectedFunctionMapper、boolean)不适用于参数(String、Class、PageContext、null) 完整堆栈跟踪: Stacktrace:在o

  • 本文向大家介绍tomcat加载jar异常问题的分析与解决,包括了tomcat加载jar异常问题的分析与解决的使用技巧和注意事项,需要的朋友参考一下 现象描述: 项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常“1.10.3-1.4.3\hdf5.jar  系统找不到指定的文件”,虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些异常就像见到

  • 我在尝试使用Maven将servlet部署到Tomcat时遇到了一个问题;我已经在其他帖子中读到了关于这个问题的文章,但仍然不能成功地给出答案/建议。 不管我做什么,我都有一个例外: 这是我的web.xml文件: 以防万一: 我试着重新清洁和建造它,但仍然没有改变;我错过了什么?多谢了。

  • 本文向大家介绍java.net.MalformedURLException异常的解决方法,包括了java.net.MalformedURLException异常的解决方法的使用技巧和注意事项,需要的朋友参考一下 代码中URL url = new URL(someUrl);这一行出现java.net.MalformedURLException异常 解决方法是,对someUrl中的参数名和参数值都UR

  • 并在握手失败结束时找到“无效”记录器: 从记录器来看,我认为使用的SSL协议版本是TLS1.2,看起来不错。它看起来像密码不匹配-但不确定我是否忽略了什么,以及如何补救这一点。 在进一步检查日志时,发现以下一个错误:

  • 问题内容: 我正在尝试使用以下方法从Android应用程序调用RESTful Web服务: 我可以使用Android模拟器浏览器以及从我的机器浏览至xml地址并查看结果。我已为我的应用授予INTERNET权限。 我正在用Eclipse进行开发。 我已经看到它提到我可能需要配置代理,但是由于我正在调用的Web服务位于端口80上,这应该没关系吗?我可以用浏览器调用该方法。 有任何想法吗? 问题答案:

  • 每当我试图在自定义回收器视图中以网格布局加载数据时,视图会突然消失,但有时它会完美地加载数据。我在滑动刷新布局下的嵌套滚动视图下使用了回收器视图。 我已经尝试了这个链接“添加时RecycerView addInArray error”上给出的所有内容,但没有任何帮助。 我希望在我给定的布局条件下完美地加载数据。