springbootThe valid characters are defined in RFC 7230 and RFC 3986

一、问题现象
请求接口报400,参数接收错误。
二、翻译
The valid characters are defined in RFC 7230 and RFC 3986的意思就是说在请求目标中找到无效字符,有效字符在RFC 7230和RFC 3986中定义,也就请求中包含非法字符。
三、原因分析
这里的[]和{}都是非法字符。Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
在这里插入图片描述

四、解决
第一种方法:
对于springboot而言。我们需要重新写一个配置类来让它变成合法的。

package org.jeecg.modules.jmreport.config;

import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author xuhc7
 * @date 2022年01月10日 15:02
 */
@Configuration
public class WebConfig {
    @Bean(name="webServerFactory")
    public ServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory tomcatServletWebServerFactory= new TomcatServletWebServerFactory();
        tomcatServletWebServerFactory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}"));
        return tomcatServletWebServerFactory;
    }
}

第二种方法:
在yml中配置

server:
  tomcat:
    relaxedQueryChars: <,>, [,],^,`,{,|,}

五、说明
对于网上说的降低tomcat版本个人感觉浪费时间也不实用。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上述引用内容讨论了一个关于请求头中包含非法字符的问题。根据RFC 7230RFC 3986规范,请求头中只允许包含英文字母(a-zA-Z)、数字(0-9)以及一些特殊字符(-_.~)。如果请求头中包含了不在规范中定义的字符,则会导致报错。解决这个问题可以采取以下三种方案: 方案一:对于包含非法字符的请求头,可以手动修改请求头中的参数,将非法字符替换为规范允许的字符。 方案二:调整Tomcat的配置,使其不再严格按照RFC 3986规范进行访问解析。这样可以允许请求头中包含更多的字符。 方案三:使用其他的HTTP服务器替代内置的Tomcat。这样可以避免Tomcat对请求头的严格检查。 综上所述,问题中提到的"he valid characters are defined in RFC 7230 and RFC 3986"是指请求头中只允许包含RFC 7230RFC 3986规范中定义的字符。而报错是因为请求头中包含了不在规范中定义的字符。解决这个问题可以采取上述提到的三种方案之一。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot get请求过滤特殊字符串【The valid characters are defined in RFC 7230 and RF】](https://blog.csdn.net/Weirdo_zhu/article/details/120053492)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [IE上的 The valid characters are defined in RFC 7230 and RFC 3986 坑的解决方法](https://blog.csdn.net/dreaming317/article/details/108124811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值