Tomcat验证http头导致前端向后端传值失败的问题

描述

The valid characters are defined in RFC 7230 and RFC 3986
前端传递含有非法的字符,导致以上错误。

原因

新版本的Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
准确说是
org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]
中定义了一堆not request target

if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) {
                IS_NOT_REQUEST_TARGET[i] = true;
            }

即对应键盘上的ASCII码

控制键(<32或者=127)
非英文字符(>127)
空格(32)
双引号(34)
#(35)
<(60)
(62)
反斜杠(92)
^(94)
TAB上面那个键(96)
{(123)
}(124)
|(125)

解决方法

配置tomcat/conf下的catalina.properties
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

Tomcat前端中文后端乱码可能是由于以下几个原因导致的: 1. 字符集不匹配:前端页面使用的字符集与后端处理请求时使用的字符集不一致。解决这个问题,可以在web.xml文件中添加字符编码过滤器,设置正确的字符集,确保前后端都使用相同的字符集,例如UTF-8。 2. 数据传输格式不正确:在前后端数据传输过程中,可能存在数据格式转换错误。例如,前端传输的数据以URL编码形式传递,后端没有进行正确的URL解码,导致乱码。此时,可以在后端通过URL解码函数将传递的数据解码为正常字符。 3. 数据库编码设置不正确:如果后端涉及到与数据库交互,那么可能是数据库的编码设置不正确导致的乱码。可以检查数据库的默认字符集,如果是乱码,可以修改数据库的默认字符集并重新导入数据。 4. 数据库连接配置问题:如果后端和数据库的连接存在问题,可能会导致中文数据在数据库中存储或读取时出现乱码。检查后端与数据库连接的配置,确保连接参数正确设置,并且数据库连接使用的字符集与数据库一致。 在解决乱码问题时,我们应该先确定具体是哪个环节引起的乱码,然后根据具体情况进行对应的调整和处理。另外,为了统一字符集和避免乱码问题,建议在项目开发时将前后端字符集设定为UTF-8,并通过测试确保数据在整个流程中都能正确传递和显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值