The valid characters are defined in RFC 7230 and RFC 3986问题

news/2024/11/30 0:35:09/

最近在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 headerNote: 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 3986at 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.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.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.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: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:

 <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/>

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

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


http://www.ppmy.cn/news/416289.html

相关文章

tomcat 请求出现RFC 7230 and RFC3986的错误,解决办法

问题描述 今天在测试接口的是否使用tomcat启动服务&#xff0c;然后通过get请求去测试接口&#xff0c;页面返回报的错误是400。 tomcat中错误如下图所示&#xff1a; 请求参数为 location[{"lng":108.871597,"lat":34.194412}] 很明显&#xff0c;在loca…

IE上的The valid characters are defined in RFC 7230 and RFC 3986坑

前言 日常开发中经常遇到一些莫名其妙的小问题&#xff0c;例如即将上线的项目在线上异常报错&#xff0c;但是在本地确可以正常运行。往往这猝不及防的小惊喜&#xff0c;真是让我们猿猿欲哭无泪啊。这里简单总结一下在IE浏览器上遇到的一个小坑&#xff0c;之前就因为这个小…

IE上的 The valid characters are defined in RFC 7230 and RFC 3986 坑的解决方法

前言 日常开发中经常遇到一些莫名其妙的小问题&#xff0c;例如即将上线的项目在线上异常报错&#xff0c;但是在本地确可以正常运行。往往这猝不及防的小惊喜&#xff0c;真是让我们猿猿欲哭无泪啊。这里简单总结一下在IE浏览器上遇到的一个小坑&#xff0c;之前就因为这个小…

The HTTP header line [http Method: POST] does not conform to RFC 7230 and has been ignored

今天遇到一个比较基础&#xff0c;又没遇到过的问题。 这是使用httpClient调用接口的时候报的错误&#xff0c;错误就是http的请求头不正确。但是调用接口的是共用方法&#xff0c;以前都是正常用的&#xff0c;怎么这次就不行了呢&#xff1f;换了一个请求方法就好了。 话不多…

BSS 7230 航空内饰材料阻燃性能测试

BSS 7230 航空内饰材料阻燃性能测试--标准名称 BSS 7230 Determination of flammability properties of aircraft materials BSS 7230 航空内饰材料阻燃性能测试 BSS 7230 航空内饰材料阻燃性能测试--适用范围 Scope&#xff1a; This standard describes the procedures …

Advanced-C.01.基础知识

C语言程序设计概述 一个简单句的C程序 #include <stdio.h> int main(){printf("This is a C program.\n");retrun 0; }C程序的执行过程 数据单位 bit&#xff1a;位&#xff0c;计算机中最小的数据单位Byte&#xff1a;字节&#xff0c;计算机中信息组织和存…

联想M490原装Win8系统改Win7系统的血泪史

折腾了近两天&#xff0c;终于弄好了。以后再也不敢胡乱的换系统了&#xff0c;要换系统也得先知道该注意什么事项&#xff0c;不能什么都不知道就瞎搞&#xff0c;不要自认为自己知道。自认为自己知道什么是种非常无知的想法&#xff01;还有就是&#xff0c;网上一些什么都不…

关于联想G40-30不能从win8改win7的解决方案(亲测有效果)!!!

2019独角兽企业重金招聘Python工程师标准>>> 过年期间帮忙表哥重装了一台奇葩联想的笔记本,各种配置设置过程莫名其妙的: 原文已经失效转载备注下: 前段时间看到本论坛上有关于“现在最新上市的win8.1笔记本怎么更改不成win7和xp的系统?”这样的一个帖子。装…