首页 > 其他分享 >The valid characters are defined in RFC 7230 and RFC 3986问题

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

时间:2023-06-02 16:32:12浏览次数:43  
标签:java tomcat defined RFC url characters apache org


最近在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.AbstractProtocolThe valid characters are defined in RFC 7230 and RFC 3986问题_apacheSocketProcessor.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.ThreadPoolExecutorThe valid characters are defined in RFC 7230 and RFC 3986问题_tomcat_02WrappingRunnable.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、网上资料
网上找到一些有用信息:
(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如何让解决类似问题,有空再学习哦!


标签:java,tomcat,defined,RFC,url,characters,apache,org
From: https://blog.51cto.com/chengzheng183/6403967

相关文章

  • Template execution failed ReferenceError BASE_URL is not defined
    错误VueTemplateexecutionfailed:ReferenceError:BASE_URLisnotdefinedReferenceError:BASE_URLisnotdefined解决替换index.html替换前<linkrel="icon"href="<%=BASE_URL%>favicon.ico">替换后<linkrel="icon"......
  • Invalid prop: type check failed for prop “value”. Expected String, Number, got
    记录一个报错问题,之前别的同事写的代码,还看了半天有点无语!!下拉选择部门,联动动态赋值责任人下拉列表警告,导致选择责任人的时候无法正确赋值undefined。究其原因是封装的表单formItem项中传入了下拉选项的映射字段,如下: 而在选择部门的时候又已经把动态数据遍历处理成了标准的la......
  • 关于在 computed 使用 ref 获取 dom 结点为 undefined的问题
    原因:因为ref本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们,它们还不存在computed里面无法获取到ref解决方法:方法一:data:{isMount:false,},mounted(){this.isMount=true},computed:{if(this.isMount){console.l......
  • vue3学习中使用vue-router@4的问题Invalid VNode type: undefined (undefined)
    首先是按照常规的箭头函数引入的方法,结果报一下错误,且页面报错constHelloWorld=()=>import('../components/HelloWorld.vue'); 解决办法import{defineAsyncComponent}from'vue'constHelloWorld=defineAsyncComponent(()=>import('../components/HelloWorld.vue......
  • 创建及使用一个SqlServer的用户自定义表类型(User-Defined Table Type)
    创建一个用户自定义表类型(User-DefinedTableType)CREATETYPE[dbo].[MyTypeName]ASTABLE( [Field1][nvarchar](50)NOTNULL, [Field2][nvarchar](100)NULL, [Field3][nvarchar](50)NULL, [Field4][nvarchar](20)NULL, [Field5][nvarchar](20)NULL)GO直接......
  • $ is not defined (已解决)
    $isnotdefined(已解决)F12调试页面Console错误提示因为一个项目要引用utils,而且utils里用到了JQuery,所以提示$未定义,两个JS引入顺序反了<scriptsrc="/www/xgwy_m/js/utils/utils.js"></script><scriptsrc="/js/jquery_lazyload-1.7.2/jquery.lazyload.min.js"></scr......
  • js 连接数据库 提示:ActiveXObject is not defined
    ActiveXObjectisnotdefined最近比较闲,上班瞎捣鼓一下,没想到报错了,提示ActiveXObjectisnotdefined大概是在js连接数据库时new对象使用的是ActiveXObject完事儿使用的浏览器是edge,但是在ie就没有问题,那么估计就是浏览器的设置问题点开edge的设置然后在默认浏览器的侧栏......
  • this.$refs.ref 不存在 undefined v-if和v-show 的区别
    <divv-if='true'>  <div>....<el-inputref='ref'/></div></div> 上面的代码,引用this.$refs.ref=undefined; 改为v-show解决。 网上有好多说法是:this.$nextTick(()=>{放这里});在这里不能解决的。原因:v-if条件不满足,document中是不存在的,v......
  • JS中的undefined 与 null
    在JavaScript中,undefined和null是两个特殊的值,用于表示缺失或空值。undefined是一个表示未定义或未赋值的原始值。它在以下情况下使用:1.变量声明了但未初始化时,默认为undefined。letx;console.log(x);//undefined  2.访问对象属性或数组元素时,如果该......
  • Uncaught TypeError: Cannot read properties of undefined (reading ‘install‘)
     出现该情况的原因是vue-router安装的版本太高,一般vue2的项目对应的版本是vue-router@3版本①在控制台输入: [email protected] 重新安装vue-router即可解决......