写了个接口,在测试访问的时候,需要传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. 如何修改git上传代码的作者姓名

    随着IT行业的不断壮大,开源的东西越来越多,使用git来进行代码管理的人自然也越来越多,而且很多人的git账户都不是自己的本人名字,但是在公司工作的时候为了遇到问题能够定位责任人和便于区分提交人,通常 ...

  2. Linux 常用命令 | free 详解

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一.本文介绍free命令的使用方法和 ...

  3. LNMP+Redis架构部署

    工作机制 L(Linux)N(Nginx)M(Mysql)P(PHP)架构想必大家都知道,LNMP架构主要作用是让前端服务与后端存储以及后端的一下服务进行连接起来,来实现php程序的动态请求. 而今天 ...

  4. request爬虫通用的小技巧

    嵩天老师一直强调的通用代码框架,这个框架可以用在很多爬虫中用来获取HTML文本,并且它通过response.raise_for_status()方法判断返回的状态码是不是200,如果不是,就会引发HT ...

  5. html5不能播放视频的方法

    html5不能播放视频的方法H5不能播放视频的方法 格式工厂转换成 AVC 注意音频流 采样率和比特率 设置低一点 不然播放会卡住 还有点击播放必须要click 不要用touchstart没效果的

  6. 关闭redis持久化功能

    关闭redis持久化功能持久化会报如下信息 会影响硬盘写入性能 所以没什么用 就关掉吧 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 <pre> ...

  7. SpringBoot 2.x版本+MultipartFile设置指定文件上传大小

    SpringBoot-versio:2.1.9-RELEASE 由于新版本的SpringBoot已经弃用了如下, 这种方式,提供了新的 配置方案. 这个是官方的介绍 Handling Multipar ...

  8. 对学习Python自然语言处理的一点儿感悟

    研究生阶段,如果一开始找不到知识点,那就结合导师的研究课题以及这个课题设计到的知识领域,扎好基础知识能力.以我研究的自然语言处理领域为例,如果一开始不知道研究点,且又要安排学习计划,那么我会在选择: ...

  9. 分享使用PHP开发留言板

    首先我不是一名开发人员,只是一名小小的运维工程师,PHP是我自己喜欢的一门开发语言,所以我偶尔也会敲一些代码,写一些案例.今天我给大家分享的是使用PHP开发的留言板,留言板功能不全所以请大家见谅,也不 ...

  10. python进程与线程的操作

    进程操作: # project :Python_Script # -*- coding = UTF-8 -*- # Autohr :XingHeYang # File :processTest.py ...