背景

在将tomcat升级到7.0.81版后,发现系统的有些功能不能使用了,查询日志发现是有些地址直接被tomcat认为存在不合法字符,返回HTTP 400错误响应,错入信息如下:

原因分析

经了解,这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有"{"不在RFC3986中的保留字段中,所以会报这个错。

根据(https://bz.apache.org/bugzilla/show_bug.cgi?id=60594) ,从以下版本开始,有配置项能够关闭/配置这个行为:
8.5.x系列的:8.5.12 onwards
8.0.x系列的:8.0.42 onwards
7.0.x系列的:7.0.76 onwards

处理方法

.../conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=|  ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},表示把{}放行

------2018.01.30 新增--------
按照上面的方法处理好后,在非IE浏览器上访问,是没有问题了。但若是在IE浏览器上进行访问,这个错误还是会出现,在IE上访问出现这个错误的原因:因为url的参数json中有双引号,火狐和谷歌浏览器会自动对url进行转码,但IE不会

这种情况的处理方法:
给系统配置方向代理服务器,通过反向代理服务器进行urlrewrite,手动取出各个json的数据,手动将双引号进行转码为%22:

具体方式如下:
编辑 Apache安装目录/conf/httpd.conf, 在配置项目反向代理的前面添加如下信息:

RewriteCond %{QUERY_STRING} json
RewriteCond %{QUERY_STRING} !msKey
RewriteCond %{QUERY_STRING} msInfo
RewriteCond %{QUERY_STRING} player
RewriteCond %{QUERY_STRING} {[^a-zA-Z0-9]([a-zA-Z]+)[^a-zA-Z0-9]:[^a-zA-Z0-9]([a-zA-Z0-9*]+)[^a-zA-Z0-9],[^a-zA-Z0-9]([a-zA-Z]+)[^a-zA-Z0-9]:[^a-zA-Z0-9]([a-zA-Z0-9*]+)[^a-zA-Z0-9]}
RewriteRule ^(.*)? $1?method=sendJson&json={%22%1%22:%22%2%22,%22%3%22:%22%4%22} [R,L,NE]

参考

https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html(官网各配置项说明)

解决:Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986的更多相关文章

  1. 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题

    通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说 ...

  2. 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF

    通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说 ...

  3. Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986

    Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom ...

  4. 关于toncat的Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986

    首先这个错误通常的产生原因, 是tomcat的确收到了格式不正确的请求参数,根据tomcat的版本支持的解析,tomcat抛出这个错误. 但是还有一种就是前台发送的请求方式由 get发送导致本应pos ...

  5. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

    解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF ...

  6. 解决springboot项目请求出现非法字符问题 java.lang.IllegalArgumentException:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    springboot版本: 2.1.5 最近使用springboot搭建了一个App后台服务的项目,开发接口的时候在本机使用postman工具做请求测试,请求返回一直很正常,但是在前端开发使用h5请求 ...

  7. 已解决:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 问题

    请求: http://127.0.0.1:8080/driverApp/findLikeAddress?json={"shopname":"广东省"," ...

  8. Tomcat v7.0 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    十二月 , :: 下午 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request ...

  9. 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 ...

随机推荐

  1. php之微型博客的创建

    一,微型博客的开发思路 微型博客的创建,确定无疑我们会用到PHP和mysql之间的增添删改查,首先来看一下思维导图: 搭建好计算机里的apache php 和mysql的联动功能,打开phpmyadm ...

  2. Titanic幸存预测分析(Kaggle)

    分享一篇kaggle入门级案例,泰坦尼克号幸存遇难分析. 参考文章: 技术世界,原文链接 http://www.jasongj.com/ml/classification/ 案例分析内容: 通过训练集 ...

  3. UART学习之路(一)基本概念

    第一篇博客,首先记录一下这一个多星期来的学习内容. UART学习之路第一篇,是UART的基本概念介绍.后续会用STM32F103的串口与PC机通信.最后使用Verilog HDL写出串口发送模块和接收 ...

  4. Word中用VBA插入一个文件夹里的所有.jpg图片

    每四张图片放在一页,第一行为四张图片的文件名 插入图片调整尺寸参考 Sub final() Dim FN As String, N%, W#, H#, PW#, PH# With ActiveDocu ...

  5. Hadoop命令大全

    Hadoop命令大全 分类: 云计算2011-03-01 15:04 6852人阅读 评论(0) 收藏 举报 hadoop作业任务集群class脚本 1.列出所有Hadoop Shell支持的命令   ...

  6. 20155207 实验四 《Android程序设计》实验报告

    20155207 实验四 <Android程序设计>实验报告 实验名称 Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Androi ...

  7. 20155231 2016-2017-2 《Java程序设计》第3周学习总结

    20155231 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封 ...

  8. C语言 结构体学习

    结构体的学习 struct 结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合. 结构中可以使用不同的数据类型. 结构说明和结构变量定义 在Turbo C中, 结构也是一种数据类型,可以 ...

  9. 20155332 实验二 Java面向对象程序设计

    目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学习StringBuffer 二.面向对象三要素:封装 ...

  10. Hibernate框架用法

    一,Hibernate框架介绍 没有Hibernate之前,使用jdbc来连接数据库时,需要反射加载驱动,再获取连接 在连接上获取sql承载块,传入sql语句执行,获取结果集,解析结果 Hiberna ...