最近在ssm实践项目中遇到了The valid characters are defined in RFC 7230 and RFC 3986这个问题,折腾了两天时间终于搞定了,记录一下心得。
1、首先贴出报错日志:

09-Apr-2019 14:55:11.427 信息 [http-nio-8089-exec-8] org.apache.coyote.http11.Http11Processor.service 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.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:479)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocolConnectionHandler.process(AbstractProtocol.java:806)atorg.apache.tomcat.util.net.NioEndpointConnectionHandler.process(AbstractProtocol.java:806) at org.apache.tomcat.util.net.NioEndpointConnectionHandler.process(AbstractProtocol.java:806)atorg.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:617)atorg.apache.tomcat.util.threads.TaskThreadWorker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThreadWorker.run(ThreadPoolExecutor.java:617)atorg.apache.tomcat.util.threads.TaskThreadWrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

大概意思为:在请求目标中找到无效字符,有效字符在RFC 7230和RFC 3986中定义。
就是说http请求的url中有非法字符,而我的项目所需请求url为:http://localhost:8089/teacher/deleteFile?path=D:\Projects\MyEducationSystem-code\EducationSystem\target\EducationSystem\newuploads\古代书法\古代书法01.txt
url中有?,\,/,还有中文字符。
显然问题出在了这里。
2、网上资料
网上找到一些有用信息:
(可参考:https://blog.csdn.net/ezreal_king/article/details/72654157)
(可参考:http://www.cnblogs.com/wsygdb/p/7661220.html)
(1)RFC 3986文档规定,Url中只允许包含英文字母(a-z,A-Z)、数字(0-9)、- _ . ~ 4个特殊字符以及所有保留字符。
(2)RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]
由此我知道是我的url中符号违反了RFC 3986和RFC 7230。
而且跟tomcat版本有关:我的项目使用的tomcat为:Tomcat8.5.39
而在Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
3、解决方案
综上,有3种解决方案:
(1)使用Tomcat7.0.69之前的版本;
(2)对url的特殊字符进行转义
(3)修改tomcat配置文件
我先采用了第三个方法,在tomcat8.5.39版本下修改配置文件tomcat.xml和catalina.properties均未见效!
然后采用第一种方法进行转义,发现很是麻烦,也未成功!
最后果断采用了第一个方法,更换了低版本的tomcat(7.0.68).
方法如下:
进入tomcat官网:http://tomcat.apache.org/

点击Archives进入选择合适的版本,进入bin目录下载。

在项目中更换tomcat即可!
此时,重新启动tomcat,The valid characters are defined in RFC 7230 and RFC 3986问题顺利解决,但是我的项目url中有中文字符,springmvc接收到的url显示为中文乱码,导致功能失败:

调试信息:

可见删除文件函数传入的path中文显示为乱码,删除失败!
需要修改tomcat的配置文件tomcat.xml:

在这里添加上URIEncoding=“UTF-8”,重启tomcat,问题解决!

对于高版本的tomcat如何让解决类似问题,有空再学习哦!

The valid characters are defined in RFC 7230 and RFC 3986问题相关推荐

  1. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

    转载:(http://blog.csdn.net/zeroso/article/details/70592179) 错误现象: java.lang.IllegalArgumentException: ...

  2. Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986

    问题 24-Mar-2017 23:43:21.300 INFO [http-apr-8001-exec-77] org.apache.coyote.http11.AbstractHttp11Proc ...

  3. 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题

    分析原因: 导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请 ...

  4. java环境安装1359错误_解决The valid characters are defined in RFC 7230 and RFC 3986错误问题...

    最近在朋友遇到一个比较诧异的异常问题,tomcat启动时报Invalid character found in the request target. The valid characters are ...

  5. Tomcat:The valid characters are defined in RFC 7230 and RFC 3986 问题处理

    前段时间遇到这个问题: 包含json字符串类型的参数的http请求失败,返回状态码400,提示invalid character found in the request target. Tomcat ...

  6. SpringBoot 中 The valid characters are defined in RFC 7230 and RFC 3986 终极解决方案

    场景 springboot(2.0.4)使用内置 tomcat(8.5.32),  在GET请求中含有特殊字符 [ ] 时报错: java.lang.IllegalArgumentException: ...

  7. Invalid character found in the request target .The valid characters are defined in RFC 7230 and RFC

    问题: [https-jsse-nio-443-exec-9] INFO org.apache.coyote.http11.Http11Processor - Error parsing HTTP r ...

  8. The valid characters are defined in RFC 7230 and RFC 3986-Tomcat解决方案

    问题: 发生场景: Tomcat 从 7.0.57 升级到 8.5.65 之后, 应用程序访问出现. 请求URL地址中包含了JSON格式的参数. 原因及解析: 请求地址包含了无效字符, 有效字符的定义 ...

  9. 异常:Invalid character found in the request target. The valid characters are defined in RFC 3986

    异常:Invalid character found in the request target. The valid characters are defined in RFC 3986 参考文章: ...

最新文章

  1. LeetCode简单题之打折购买糖果的最小开销
  2. 蓝桥杯国赛知识点汇总
  3. poj 3614 Sunscreen(优先队列+贪心)
  4. ARM的cache和写缓冲器(write buffer)
  5. dc综合与pt静态时序分析(中文)_小三电系统(PDU+DC+OBC)的技术研究
  6. Flink架构及工作原理
  7. leetcode 122. 买卖股票的最佳时机 II(贪心算法)
  8. 大型JavaScript应用程序架构模式
  9. php项目怎么分配,php项目目录的合理划分和Pipeline 组件的使用场景
  10. docker删除镜像、容器命令
  11. oracle 二进制与运算,Oracle怎么操作进行二进制的比对
  12. 拓端tecdat|游记数据感知旅游目的地形象
  13. 直插式电阻电容封装与尺寸图…
  14. github电脑壁纸_程序员必用的电脑桌面!
  15. 用友通总账问题维护精粹
  16. 【历史上的今天】3 月 8 日:游戏机之父诞辰;搜索技术之父出生;MIT 公开演示旋风计算机
  17. 常见js针对浏览器之间的兼容问题
  18. excel空值排查快捷键
  19. 大野耐一的十条管理训诫|优思学院
  20. 三年级计算机课标,三年级信息技术教案上册

热门文章

  1. openSearch支持mysql版本_OpenSearch 使用二三事-阿里云开发者社区
  2. Leetcode每日一题:844.backspace-string-compare(比较含退格的字符串)
  3. Leetcode每日一题:182.duplicate-emails(查找重复的电子邮箱)
  4. Redis基础(十)——性能监控和监视器
  5. jdk说明文档_给JDK报了一个P4的Bug,结果居然……
  6. 宁波海曙区服务器维修,宁波市海曙区第二医院关于服务器(备份一体机) 1套的在线询价公告...
  7. [Ext JS ][12.13] FieldSet 与 Grid结合 ,实现FieldSet 显示Gird中Store 的数量
  8. DQL 学习3 -- Administration Methods
  9. HTML meta 标签 和 http-equiv
  10. Ext 中使用Ajax