解决error parsing http request header问题

以后碰到项目中奇怪问题要进行记录啊,这就算是我记录的第一个问题。
首先这个项目工具是IDEA,环境技术是SpringBoot(SSM)项目

09:25:11.592 INFO  [nio-8802-exec-5] o.a.c.http11.Http11Processor - Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

这个问题也不算难,网上有很多现成的解决方案,基本都是修改tomcat的配置,但我一个小组员不可能更改配置,只能再找解决方案。
但我这问题很奇怪,chrome不报错,只有使用IE(8-11)会报这个问题,才发现是字符转义的问题,英文数字没事,只有汉字会出问题。而问题出现的原因是将参数直接放在url进行传递
我们这边的烂代码是

 var url = '/noc/wtdj/saveOrEditWenTiDanJu'+
                    'isAdd=' + isAdd +
                    '&taxRate=' + taxRateVal +
                    '&moneyIncludeTax=' + moneyIncludeTaxVal +
                    '&goodsAmount=' + goodsAmountVal +
                    '&goodsMode=' + goodsModeVal +
                    '&goodsUnit=' + goodsUnitVal +
                    '&goodsName=' + goodsNameVal +
                    '&mainId=' + idVal +
                    '&userName=' + userNameVal +
                    '&userTaxNo=' + userTaxNoVal +
                    '&userAddr=' + userAddrVal +
                    '&userBankinfo=' + userBankinfoVal +
                    '&totalMoneyIncludeTax=' + totalMoneyIncludeTaxVal +
                    '&oldDataType=' + oldDataType;

本身这是一个表单,也不知道为什么不直接用表单提交,我也不能修改大结构,只能将传参数的方法改成

data:{
                        isAdd:1,
                        taxRate : $('#taxRate').val(),
                        moneyIncludeTax : $('#moneyIncludeTax').val(),
                        goodsAmount : $('#goodsAmount').val(),
                        goodsMode : $('#goodsMode').val(),
                        goodsUnit : $('#goodsUnit').val(),
                        goodsName : $('#goodsName').val(),
                        mainId : $('#id').val(),
                        userName : $('#userName').val(),
                        userTaxNo : $('#userTaxNo').val(),
                        userAddr : $('#userAddr').val(),
                        userBankinfo : $('#userBankinfo').val(),
                        oldDataType : $('#oldDataType').val(),
                        totalMoneyIncludeTax : $('#totalMoneyIncludeTax').val()
                    },

ajax中添加对象传参数,问题解决
不知有没有大神解释一下,在url中用?&传递参数和直接用data传对象的区别…
———————————————————————————————————————
经过进一步研究,发现高版本的tomcat会验证请求,简单的说参数里不能含有中文和一些特殊符号。chrome 和火狐会自动转码,但IE不会,所以可能只有IE会报这个异常,解决方法除了设置tomcat 外,最直观的方法就是将有可能不合法的参数进行转码
具体的方法:
前端页面

str = encodeURI(encodeURI(str))

后台controller
java.net.URLDecoder包(不需要引入),需要加异常处理或者抛出异常

		try {
            str = URLDecoder.decode(str,"utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

这里由于本身有可能出现空指针异常,所以我没有把异常写的很详细,也没有把多个需要转码处理的放到同一个try中,不知道有没有大神提供更好的解决方式
另外需要注意的是加时间戳的时候,也要new Date().getTime()的方式加,不然直接new Date()会出现中文字符。
参考博文:
https://blog.csdn.net/fireofjava/article/details/80856887
https://www.cnblogs.com/lr393993507/p/7755867.html
https://www.cnblogs.com/wsygdb/p/7661220.html
完美!!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:这个问题通常是由于HTTP请求头部过长导致的。可以通过在Tomcat的server.xml文件中添加maxHttpHeaderSize属性来解决这个问题。例如,在Connector元素中添加maxHttpHeaderSize="8192"。这样可以增加HTTP请求头部的大小限制。\[1\] 引用\[2\]:另外,报错信息中还提到了"Invalid character found in the request target"。这意味着请求目标中存在无效字符。根据RFC 7230和RFC 3986的定义,请求目标中只能包含特定的有效字符。如果请求目标中包含了无效字符,就会导致解析错误。\[2\] 引用\[3\]:还有一种可能的错误是"Invalid character found in method name"。这意味着HTTP方法名中存在无效字符。根据HTTP协议的规定,HTTP方法名必须是有效的标记。如果方法名中包含了无效字符,就会导致解析错误。\[3\] 综上所述,"error parsing http request header"的问题通常是由于HTTP请求头部过长或包含无效字符导致的。可以通过增加maxHttpHeaderSize属性来解决头部过长的问题,并确保请求目标和方法名中只包含有效字符。 #### 引用[.reference_title] - *1* [Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors报错,已...](https://blog.csdn.net/qq_44893880/article/details/105755299)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【TomcatError parsing HTTP request header解决方案](https://blog.csdn.net/qq_33591903/article/details/104915079)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值