解决SpringBootThe 报错valid characters are defined in RFC 7230 and RFC 3986

这个问题是在日常开发中遇到的,排查发现是前端产品在发送post请求的时候,自动把参数拼接到url后面(有点坑),在包含特殊字符的时候就会导致请求报错,理论上不允许的特殊字符如下:
在这里插入图片描述
项目上线在即,来不及修改前端产品,只能暂时后端兼容。这边记录一下解决方案。
针对这个问题,通过查阅资料及实测得到了有以下几个解决方案,供各位参考:
1.去除url后面的特殊字符(当前应用场景不适合)
2.改成post请求(针对我的情况也不满足)
3.更换springboot版本,低版本的内置tomcat是没有对请求头做严格校验的,但是这样可能会存在一些其他的风险,不太建议
4.修改HttpParser 源码(这个方案是在网上搜到的,没有实践)

5.将允许的特殊字符添加到启动类,如下(最终采用的方法)

@Bean
	public ConfigurableServletWebServerFactory webServerFactory() {
		TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
		factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]\\"));
		return factory;
	}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
上述引用内容讨论了一个关于请求头中包含非法字符问题。根据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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值