关于解决 The valid characters are defined in RFC 7230 and RFC 3986

1 背景环境 Eclipse tomcat mysql 动态网站开发

本打算设计一个登录页面,当我们输入正确的用户名和密码就跳转到另外一个页面,然而却没有想象的那么简单。

2 出现的问题

 当我修改数据库的字符类型为数字或者字母的时候 ,可以正常登陆

 

然而当我将username 改成中文的时候,再次向登陆界面输入 李思思  123 控制台就报了如下异常

 

 

难道是因为用户名不能输入中文  当然不是这个原因,上网百度了很久,有这么几种解决办法

原文链接:https://blog.csdn.net/qq_26975307/article/details/81459826

①   换了个低版本的tomcat

②   遵循7230 and RFC 3986规范,对于非保留字字符做转义操作

③   使用保留字字符

④   将json数据进行urlencode编码

这些用过之后发现并没有什么用,而且低版本的tomcat 也是换汤不换药,没有去尝试。

接着参考了这篇博客https://blog.csdn.net/zeroso/article/details/70592179/的做法,采用的是
在conf/catalina.properties中最后添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
然后重启tomcat,却发现无济于事。

网上始终找不到适合自己解决的方式,又该怎么办呢? 还是得好好的读异常信息,明白究竟是什么错误。
 

解决过程

翻译一下错误信息 

HTTP请求头解析错误
注意:进一步出现的HTTP头解析错误将在调试级别记录下来。
在请求目标中发现的无效字符。有效字符在RFC 7230和RFC 3986中定义

请求目标中发现无效字符,这句话很关键 ,我定位到了 向服务端发送请求的url

通过$.post() 向服务器发送请求的方式 第一个参数为URL,难道是后面传递参数的形式不对吗?但是以前做过那么多类似的向服务器传递参数也没有报错。这些都不行,难道是浏览器的原因,不用eclipse 自带的浏览器,换成谷歌浏览器尝试一下。

使用外部web浏览器 我默认使用的浏览器是谷歌浏览器

OK,到现在在调试一下

好的,现在向服务器提交的数据成功的被接收到了,并且我用控制台打印出来证明输入没有错误,那为什么判断我输入的用户名和密码错误呢? 返回false。我在servlet 和 jsp 已经把字符格式设置成为UTF-8了。

接下来只有去看数据库,设计表的时候是否把字符格式设置正确,打开Navicat

仍然是utf8, 字符集里面有很多utf8格式,那一定是正确的的吗?很明显不对,那么只有去百度了,最后发现字符集应该设置为utf8mb4,有木有想到。

再来测试一次

 

最后解决了 这个问题 ,但是到现在还是不能解释 为什么Eclipse内置浏览器不行 ,IE 浏览器也会出现类似的错误。解决问题也就只有通过不断的尝试,,慢慢的就能摸索出自己解决问题的方式。。

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值