-
2021-08-04 11:21:03
tomcat服务器get请求400错误,RFC 7230 and RFC 3986 问题解决
原因:get请求,里面包含了RFC 7230 and RFC 3986定义之外的特殊字符。
RFC3986文档规定,Url中只允许包含以下四种:
1、英文字母(a-zA-Z)
2、数字(0-9)
3、-_.~ 4个特殊字符
4、所有保留字符,RFC3986中指定了以下字符为保留字符(英文字符):
! * ’ ( ) ; : @ & = + $ , / ? # [ ]
解决:修改tomcat配置文件server.xml 允许请求中包含{ }[ ] 等字符<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" relaxedQueryChars="[]|{}^\`"<>" redirectPort="8443" />
更多相关内容 -
解决spring boot请求包含非法字符问题 The valid characters are defined in RFC 7230 and RFC 3986 错误
2021-01-20 02:39:07The valid characters are defined in RFC 7230 and RFC 3986 错误 问题出在 高版本的tomcat会对请求头进行过滤 我的项目使用的springboot版本是2.2.5版本, 内置的tomcat 版本是9.0.31。 解决方法①(推荐) 新增... -
RFC 3986:2005 Uniform Resource Identifier (URI):Generic Syntax -
2021-10-01 21:53:07RFC 3986:2005 Uniform Resource Identifier (URI):Generic Syntax - 完整英文电子版(61页).txt.zip -
uriparser:RFC 3986 URI 解析和处理库-开源
2021-05-31 02:39:30请注意,我们正在迁移到 GitHub:https://github.com/uriparser/uriparser uriparser 是一个严格符合 RFC 3986 的 URI 解析库,用 C89 编写。 uriparser 是跨平台的、快速的、支持 Unicode 并在新 BSD 许可下获得... -
tomcat异常解决(Invalid character found in... The valid characters are defined in RFC 7230 and RFC 3986)
2021-01-08 23:59:441.情景展示 ... The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283) at org.a -
uriparser:RFC 3986 URI解析和处理库-开源
2021-05-13 07:26:04请注意,我们正在迁移到GitHub:https://github.com/uriparser/uriparser uriparser是一个严格的RFC 3986兼容URI解析库,用C89编写。 uriparser是跨平台的,快速的,支持Unicode的,并根据New BSD许可获得许可。 请... -
uriparse-rs:RFC3986 的实现,包括 URI 和 URI 引用
2021-05-29 06:09:29uriparsers 实现,包括 URI 和 URI 引用。 目标 此 crate 的目标是提供用于有效创建、修改和解析 URI、相对引用和 URI 引用的类型。 下面分别介绍这三种类型。 什么是URI ? URI 代表统一资源标识符,用于标识... -
RFC 3986 URI的结构
2021-03-15 16:44:25mpeg dash 的element BaseURL语法规则遵循RFC 3986,需要做简单了解:I.1URI各个部分的名称foo://example.com:8042/over/there?name=ferret#nose\_/\______________/\_________/\_________/\__/||...mpeg dash 的element BaseURL语法规则遵循RFC 3986,需要做简单了解:
I.1 URI各个部分的名称
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _________________________|__
/ \ / \
urn:example:animal:ferret:nose
scheme:协议的名称,以字母开头,后接任意个字母/数字/+/-/.的组合。
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
authority:以双斜线”//”开始但不包括”//”, 以紧接着的第一个’/’或者?或者#(#在这里
叫着number sign)结束但不包括该符号,或者一直到URL结束为止。
authority = [ userinfo "@" ] host [ ":" port ]
[]内的部分是可选部分。
path: 在authority之后,以/开头,以紧接着的第一个?或者#结束或者直到URL结束为止。
query:以?开头,以紧接着的第一个#结束,或者直到URL结束为止,query常常以
“key=value”的形式来携带一些认证信息。
fragment: 以#开头,直到URL结束为止。Fragment常用于标记一个参考主要资源的次要
资源。
I.2 URI的参考规则
URI-reference:URI-reference可能是URI或者relative-reference,当URI-reference的前缀不
匹配scheme的语法时,表明URI-reference是一个relative-reference。
Relative-reference所参考的URI叫target URI。
在mpeg dash中,暂时只需要知道BaseURL可能需要参考上级的BaseURL来组合成一个完整的http链接即可,如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mpeg:DASH:schema:MPD:2011"
xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd"
type="static"
mediaPresentationDuration="PT3256S"
minBufferTime="PT1.2S"
profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
http://cdn1.example.com/
http://cdn2.example.com/
subsegmentStartsWithSAP="1">
7657412348.mp4
3463646346.mp4
访问两个MP4文件的HTTP URL需要组合MPD中的BaseURL和Representation中的BaseURL:
或者
-
C# 符合RFC3986标准的urlencode 类
2021-04-22 06:08:24C# 符合RFC3986标准的urlencode 类/// /// Provides implementation of RFC3986 Percent Encoding mechanism./// public class RFC3986Encoder{/// /// Performs upper case percent encoding against the specified...C# 符合RFC3986标准的urlencode 类
///
/// Provides implementation of RFC3986 Percent Encoding mechanism.
///
public class RFC3986Encoder
{
///
/// Performs upper case percent encoding against the specified .
///
/// The string to encode.
/// Encode string.
public static string Encode(string input)
{
if (string.IsNullOrEmpty(input))
return input;
StringBuilder newStr = new StringBuilder();
foreach (var item in input)
{
if (IsReverseChar(item))
{
newStr.Append("%");
var temp = ((int)item).ToString("X2");
newStr.Append(temp);
}
else
newStr.Append(item);
}
return newStr.ToString();
}
///
/// Performs lower case percent encoding (url-encodes) on the as what HttpUtility.UrlEncode does.
///
/// The string to encode.
/// Encode string.
public static string UrlEncode(string input)
{
StringBuilder newBytes = new StringBuilder();
var urf8Bytes = Encoding.UTF8.GetBytes(input);
foreach (var item in urf8Bytes)
{
if (IsReverseChar((char)item))
{
newBytes.Append('%');
newBytes.Append(ByteToHex(item));
}
else
newBytes.Append((char)item);
}
return newBytes.ToString();
}
private static bool IsReverseChar(char c)
{
return !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')
|| c == '-' || c == '_' || c == '.' || c == '~');
}
private static string ByteToHex(byte b)
{
return b.ToString("x2");
}
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, 0);
///
/// Gets the seconds from 1970/1/1.
///
/// The time to calculate from.
/// The seconds.
public static int ToUnixTime(DateTime time)
{
return (int)(time.ToUniversalTime() - UnixEpoch).TotalSeconds;
}
}
开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C# 符合RFC3986标准的urlencode 类!
-
Tomcat中出现"RFC 7230 and RFC 3986"错误的解决方法
2021-03-15 16:44:22The valid characters are defined in RFC 7230 and RFC 3986查了一下,是因为高版本tomcat中的新特性:严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了URL中只允许包含英文字母(...在用axios从前台向后台发请求时,后台报错
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
查了一下,是因为高版本tomcat中的新特性:严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了URL中只允许
包含英文字母(a-z,A-Z)
数字(0-9)
-_.~4个特殊字符
以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
而本例在传参时,在参数中传了一段JSON,传入的参数中有”{“,且有中文字符,均不在RFC3986中的保留字段中,所以会报这个错。
解决方法:
1、配置tomcat的catalina.properties
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
这种方法只适合对应的英文,如果含中文则就不行。如果有?和&这些符合那么
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}?&
2、更换Tomcat版本,但是不建议,既然有这个规范就养成习惯去遵守。
3、对相应参数编码后传输到后台再进行解码
JS端,使用encodeURI()方法:
param: encodeURI(something)
Java端,使用URLDecoder.decode()方法解码:
String temp = req.getParameter("param");
temp= URLDecoder.decode(temp, "utf-8");
如果你需要在服务器端加密,可用URLDecoder.encode(),与URLDecoder.decode()作用相反不再赘述。需要注意的是这两个java方法有两个参数,第二个参数是加密方法。不指定加密方式的写法已被废弃。
-
Apache Tomcat请求出现RFC7230 and RFC3986的错误,彻底解决方案
2021-03-22 12:33:07基本的互联网通信协议都有在RFC文件内详细说明。...RFC7230:https://tools.ietf.org/html/rfc7230RFC3986:https://tools.ietf.org/html/rfc3986Tomcat解析的Java类:org.apache.tomcat.util.http.p... -
The valid characters are defined in RFC 7230 and RFC 3986
2022-04-01 16:21:00错误提示如下: [/servlet/..._m=save&_p0="3DB928067"&_p1="27"]. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.Http11InputBuffer.parseReque -
解决异常The valid characters are defined in RFC 7230 and RFC 3986
2022-03-22 17:15:47(2)RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ] /** * 解决异常信息: * java.lang.IllegalArgumentException: * Invalid character found in the request target. The ... -
RFC3986之URL编码与解码、AFPercentEscapedStringFromString
2021-09-28 11:08:13%2522%257D&request_id=163279729816780262558651&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-51790407.pc_search_es_clickV2&utm_term=RFC3986&spm=1018.2226.3001... -
RFC 7230 and RFC 3986 各版本tomcat解决方法
2020-05-28 21:49:23项目从原先的jdk1.6+tomcat6 升级为jdk1.8+tomcat9... RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4种特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @... -
The valid characters are defined in RFC 7230 and RFC 3986 解决方案
2021-12-24 10:55:30The valid characters are defined in RFC 7230 and RFC 3986 解决方案 -
HTTP 400,The valid characters are defined in RFC 7230 and RFC 3986
2022-02-15 13:26:08RFC 7230 and RFC 3986 -
springboot中报错:The valid characters are defined in RFC 7230 and RFC 3986
2022-04-15 17:40:27启动类加代码:之后重启即可 @Bean public ConfigurableServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.... -
记录springboot架构下The valid characters are defined in RFC 7230 and RFC 3986问题排查解决
2021-05-14 16:18:11将多个springcloud项目整合成一个单体的springboot工程,前端也换...The valid characters are defined in RFC 7230 and RFC 3986问题 报错日志: 09-Apr-2019 14:55:11.427 信息 [http-nio-8089-exec-8] org.apache -
java – RFC3986 – 哪些pchars需要百分比编码?
2021-02-27 16:32:52Is it correct to assume that everything that is not unreserved, can/should be percent-...RFC 3986说:“Under normal circumstances, the only time when octets within a URI are percent-encoded is durin... -
解决tomcat RFC 7230 and RFC 3986异常
2020-02-24 18:30:20异常原因:url参数里面有特殊字符 Message Invalid character found in ... The valid characters are defined in RFC 7230 and RFC 3986 Description The server cannot or will not process the request du... -
HTTP URL 字符转义 字符编码 、 RFC 3986编码规范
2020-12-22 18:43:57RFC3986文档规定,Url中只允许包含以下四种: 1、英文字母(a-zA-Z) 2、数字(0-9) 3、-_.~4个特殊字符 4、所有保留字符,RFC3986中指定了以下字符为保留字符(英文字符): ! * ' ( ) ; : @ & = + $ , / ? # [ ... -
有效字符在RFC 7230和RFC 3986中定义
2020-09-02 14:57:23有效字符在RFC 7230和RFC 3986中定义 解决方案:找到apache-tomcat-7.0.105\conf\server.xml: <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改为:<... -
在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
2021-11-23 10:42:38有效字符在RFC 7230和RFC 3986中定义。 今天在请求中发现了这个问题,发现是tomcat高版本严格按照RFC 3986规范解析地址。 该规范只允许包含 a-zA-Z 0-9 - _ . ~ 以及所有保留字符 ! * ’ ( ) ; : @ & = + $ , / ... -
按照 RFC 3986 对 URL 进行编码 - PHP 7 中文文档
2021-04-28 02:24:49(PHP 4, PHP 5, PHP 7)rawurlencode – 按照 RFC 3986 对 URL 进行编码说明rawurlencode( string $str) : string根据 » RFC 3986 编码指定的字符。参数str要编码的 URL。返回值返回字符串,此字符串中除了-_.之外的... -
tomcat 请求出现RFC 7230 and RFC3986的错误
2020-12-30 17:18:30tomcat 请求出现RFC 7230 and RFC3986的错误 问题出现: tomcat由7.0.65升级到7.0.104后出现该问题 java.lang.IllegalArgumentException:在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义原因... -
tomcat 9 请求出现RFC 7230 and RFC3986的错误 ,坑,解决办法
2021-02-05 15:37:04日常开发中经常遇到一些莫名其妙的小问题,例如即将上线的项目在线上异常报错,但是在本地确可以... The valid characters are defined in RFC 7230 and RFC 3986, 这句话的大致意思就是说请求头中包含了 RFC 7230 an -
springBoot遇到The valid characters are defined in RFC 7230 and RFC 3986解决办法
2022-03-14 16:15:45一. 问题描述 ... " " ^ " " ) "等特殊的字符控制台会输出类似错误 , t在omcat7.0.73及以上版本都会有这种问题。 二.... 创建一个配置类 ... public TomcatServletWebServerFactory tomcatServletWebServerFactory(){ ...