写了个接口,在测试访问的时候,需要传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. vue+element UI递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

  2. Android so 文件

    要点 不同的 CPU 架构需要不同的 so 文件 NDK平台不是后向兼容的,而是前向兼容的. ABI 的概念,每一个 Cpu架构对应一个 ABI(Application Binary Interfac ...

  3. Project Euler 57: Square root convergents

    五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...

  4. maven(1)

    Maven进价:Maven的生命周期阶段 一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等 ...

  5. css字体图标的制作

    我介绍的这个办法是直接在 "阿里巴巴图标库"中制作的,方便快捷 1. 首先到 "阿里巴巴图标库"中找到你想要的图片,然后选择加入购物车 接着我们点击右上角的购物 ...

  6. 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)

    一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...

  7. 阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器

    为什么要做这个工具? 由于阿里云上的容器服务 ACK 在使用成本.运维成本.方便性.长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes ...

  8. 反汇编分析objc函数枢纽objc_msgSend

    在分析objc_msgSend之前,先来搞清楚另一个问题. 函数是什么?可能会答 void foo(void) {} 像这样就是一个函数.或者函数包括函数原型和函数定义,是一段执行某样功能的机器代码. ...

  9. byteCTF 2019

    本文作者:z3r0yu  由“合天智汇”公众号首发,未经允许,禁止转载! 0x00 前言 周末的比赛质量还是挺高的,特别是boring_code,有点烧脑但是做的就很开心. 0x01 boring_c ...

  10. 预训练语言模型整理(ELMo/GPT/BERT...)

    目录 简介 预训练任务简介 自回归语言模型 自编码语言模型 预训练模型的简介与对比 ELMo 细节 ELMo的下游使用 GPT/GPT2 GPT 细节 微调 GPT2 优缺点 BERT BERT的预训 ...