写了个接口,在测试访问的时候,需要传json串,但是后台报错了

The valid characters are defined in RFC 7230 and RFC 3986

当前使用的tomcat版本:apache-tomcat-8.0.53

一、方案一(修改后被源码覆盖,无法修改文件):

在tomcat/conf/catalina.properties中添加下面这句话

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

在tomcat/conf/service.xml中在Connector标签中添加URIEncoding="UTF-8"、relaxedQueryChars="[]|"、relaxedPathChars="[]|"

而我使用的tomcat8中catalina.properties文件中已经有了这句话,打开注释即可。

清理tomcat后,重启后还是无效,打开catalina.properties和service.xml查看,修改的内容自动恢复以前的状态,重试多次也如此,修改过用户操作文件权限也还是这种情况,真的很纳闷!!!

  

二、方案二(修改后重启tomcat无效)
在tomcat的vm中添加:-Dcatalina.config="J:\DevelopTool\apache-tomcat\apache-tomcat-8.0.53\backup\catalina.properties"

看网上的Tomcat源码分析-CatalinaProperties类
这个类很简单,就是一个属性获取的公共类。但是用法却很巧妙,代码相当优雅,所以忍不住想要再说说这个类。
它的功能是管理catalina.properties类文件中的配置属性获取,只有一个方法getPropertity(String name).

我认为这个类的高明之处就是充分使用了配置属性,配置文件路径可配置,即流程图的第一个操作,是从环境变量中获取的配置文件路径。如果我通过VM参数配置-Dcatalina.config=”xxx/myfile/catalina.properties”的话,就改变了它的默认的配置文件。

  

方案二内容引用来源:https://blog.csdn.net/wojiushiwo945you/article/details/72865427

Tomcat源码分析-CatalinaProperties类

引用来源:https://blog.csdn.net/guo20082200/article/details/80558151


分析原因:
第一种方案还不确定行不行,第二种方案试验不行。经过第二种方案的阅读发现,第一种方案没有成功的原因是tomcat会生成catalina.properties

文件覆盖你自己修改后的catalina.properties文件,于是我先用tomcat的clean将项目编译成class文件,然后修改catalina.properties后

直接启动服务,然后访问接口成功了。

第二波bug的出现
由于参数中json串过大(20kb左右),请求接口的时候又报出了错误

http post request header is too large

在tomcat/conf/service.xml中在Connector标签中添加maxHttpHeaderSize ="102400"和maxPostSize="-1",如下

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
  URIEncoding="UTF-8"
  relaxedQueryChars="[]|"
  relaxedPathChars="[]|"
  maxHttpHeaderSize ="102400"
  maxPostSize="-1"/>

说明: maxPostSize="-1"(代表POST数据大小限制,在tomcat7.0.63之前,设置为0和负数均可以代表不限制;在tomcat7.0.63之后,不可以设置为0,只能是负数代表不限制),

使用postman测试接口,post请求,body下form-data和x-www-form-urlencoded均可以请求成功,如果请求参数数据量太大,不设置maxPostSize可能会报错。

参考来源:https://blog.csdn.net/whatever8975757/article/details/60576188

第三波bug的出现
接口调试完成后,部署到测试环境时(环境中的tomcat均已修改),访问接口又报出错误

Nginx 414 Request-URI Too Large

原因是请求头的长度超出了nginx限制,在nginx.conf里面把这两个缓存加大就行
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

打开文件
vim /usr/local/nginx/conf/nginx.conf
按i进行编辑,并添加上面两行代码,按Esc退出编辑,按:wq!保存
进入nginx可执行目录sbin下
cd /usr/local/nginx/sbin/
重启nginx
./nginx -s reload

再次访问接口的时候就正常了。

 
 
 

接口访问报错:The valid characters are defined in RFC 7230 and RFC 3986的更多相关文章

  1. Tomcat9报错 The valid characters are defined in RFC 7230 and RFC 3986

    tomcat8项目移到tomcat9,出现如下问题 HTTP Status 400 – Bad Request Type Exception Report Message Invalid charac ...

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

    访问 spring boot controller时,报错:The valid characters are defined in RFC 7230 and RFC 3986 1.特殊符号 @Spri ...

  3. IE浏览器连接WebSocket报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    在项目开发中整合了WebSocket,本来没什么问题了,但是偶尔发现用IE浏览器打开web端不能推送消息,因为PC端与服务器建立连接失败了.网上查了很多资料, 又看了看源码,都不对症:又怀疑是Spri ...

  4. Tomcat报错Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    问题描述:后台报错 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.java ...

  5. springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

    1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are ...

  6. IE浏览器报400错误:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    前言: 在用IE浏览器时访问tomcat项目时,页面报400错误,后台错误: java.lang.IllegalArgumentException: Invalid character found i ...

  7. ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法

    原文:ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法 群里好几个朋友都提到过这样的问题,说他们在Silverlight中调用了WebServi ...

  8. RfcConfig 类 主要解决Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986

    tomcat 8.0以后对请求URL做了严格的过滤 就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z).数字(0-9).-_.~4 ...

  9. 【mybatis】mybatis访问报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 或者 feign被调用方使用的mybatis总报空指针异常java.lang.NullPointerException,而变量都没有问题的情况

    mybatis访问报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 需要检查的步骤: ...

随机推荐

  1. Redis中的键值过期操作

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...

  2. vue-create 报错 command failed: yarn --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist 完美解决方案

    @vue/cli 3.x 创建项目失败解决方案 报错信息 command failed: yarn --registry=https://registry.npm.taobao.org --distu ...

  3. 解决WordPress不能发邮件,WordPress 无法发送邮件

    解决WordPress不能发邮件,WordPress 无法发送邮件,不得不说WordPress这个问题真的很烦人,研究了一下午发现不能发邮件的问题无非以下几种! 1.系统本身问题,这个直接装个插件即可 ...

  4. 用PHP+Redis实现延迟任务,实现自动取消订单

    简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) 需要注意此功能是在redis 2.8版本以后推出的,因此你服务器上的reids最少要是2.8版本 ...

  5. 微擎 pdo_fetchall() 函数

    微擎 pdo_fetchall() 函数 注意点: 该函数内部直接执行原生 SQL 语句 如果在传递表名的时候使用了 tablename .则不加 ims_ 前缀 参数的传递通过 :param 的形式 ...

  6. ES6学习 let const

    1.前言 发现网易云笔记 单纯的记笔记没什么意思,所以今天来博客园写学习感受了,毕设做了休息时间就来写写新学的知识 哈哈哈 !! 2.ES6 就是JavaScript 语言的下一代标准,2015年6月 ...

  7. lldb调试使用python脚本问题总结

    lldb调试器可以使用python脚本实现功能增强,但也不是可以随心所欲的,在实际中有很多地方需要注意. 首先是对多线程环境调试使用python脚本,也要考虑python脚本有多线程安全,尤其是有许多 ...

  8. 从cocos2dx源代码看android和iOS跨平台那些事

    cocos2dx一个跨移动(平板)平台的游戏引擎,支持2d和3d,基于c/c++,网上介绍多在此不详叙.我们本篇关心的是跨平台那些事,自然而然就找到platform目录.好家伙,支持的操作平台还真不少 ...

  9. 在input输入值改变reducer里的值

    输入值改变reducer里的值 通过store.dispatch传入reducer中,函数的第二个参数可以接收到 在reducer中 在todolist文件中 然后在把this.state中的值改变

  10. mysql通俗易懂的数据库连接池原理及模拟实现

    什么是数据库连接池? 当系统使用JDBC技术访问数据库时会创建一个connection对象,而该对象的创建过程是非常消耗资源的,并且创建对象的时间也特别长,假设系统一天有1万次的访问量,那么一天就会有 ...