0%

The valid characters are defined in RFC 7230 and RFC 3986

当项目升级到tomcat高版本(tomcat7+)请求时报“The valid characters are defined in RFC 7230 and RFC 3986”的400错误该怎么解决

在tomcat的server.xml标签中添加属性relaxedQueryChars,属性配置为:

1
relaxedQueryChars="[,],|,{,},^,\,`,",<,>"

01

解释如下:

“The valid characters are defined in RFC 7230 and RFC 3986”错误提示,说明访问地址中出现特殊不符合规范的特殊字符。根据rfc规范(RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])),当在URL中使用保留字符时,需要对保留字符进行转义。【详见https://ningyu1.github.io/blog/20190626/117-tomcat-RFC3986.html】

tomcat从特定版本开始进行了特殊字符校验,Tomcat 7.0.73+,Tomcat 8.0.39+,Tomcat 8.5.7+,Tomcat 9.0.0.M12 (markt)+,因为大多数浏览器并不会对这些保留字符进行转义,所以tomcat会拒绝这些请求,为此tomcat提供了属性配置:relaxedQueryChars,可以支持” < > [ \ ] ^ ` { | }这11个字符的访问

Tomcat 7 ‘javax.el.ELException’ 的解决方式(failed to parse the expression [${xxx}])

Tomcat 7 ‘javax.el.ELException’ 的解决方式
tomcat 7对EL表达式的语法要求比较严格,例如”${owner.new}”因包含关键字new就会导致解析出错。
问题是出来了,怎么解决呢?有三种,如下:
第一种:严格遵守java规范,修改对象的属性名称,要求不包含java关键字;
第二种:修改EL表达式,例如”${owner.new}”可以修改为”${owner[‘new’]}”;
第三种:修改tomcat属性,忽略对EL表达式的关键字检查。修改$CATALINA_BASE/conf/catalina.properties文件,添加org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true选项。

Tomcat启动时出现乱码

找到Tomcat目录下conf文件夹中的logging.properties文件,打开logging.properties文件,找到文件中的java.util.logging.ConsoleHandler.encoding = UTF-8, 修改为java.util.logging.ConsoleHandler.encoding = GBK