Get请求参数过多导致请求失败

news/2024/11/24 9:58:43/

1. 问题

系统正常使用没有问题,但是有极个别的用户出现系统异常,通过日志发现某个get请求,传入的城市list太多,就会抛出异常 java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map。

2. 排查过程

看了服务方没有打印日志,刚开始以为是客户端的问题,就在客户端侧打断点进行调试,但是结论是请求发给服务端了,并返回的结果,通过postman进行重新调佣,返回的结果如下

<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1></body></html>

显示结果为HTTP Status 400 – Bad Request。

因此将服务方代码在本地启动逐个地方打断点

  1. 在dispatcherServlet打断点,请求没有走到断点处

  2. 在某几个Filter的doFilter方法打断点,请求没有走到断点处

  3. 在standardWapperValve处打断点,请求没有走到断点处

  4. 在Http11Processor处打断点,请求进入了

最后发现是tomcat默认请求头最长为8192,而get请求的参数全部在请求头里。所以在Http11Processor类中做请求头校验时校验未通过,从而返回了400。

3. 问题优化

由于tomcat对请求头默认限制字节数量为8192,不符合实际业务使用场景,所以可以在配置文件里对该限制进行自定义限制,即在在application.yml,或者是application.properties中添加

server.max-http-header-size=40960

这样,就可以加大请求头字节数量限制。这样虽然可以解决当前问题,但是指标不治本,对于请求参数过多的接口,最好是更换为post请求,或者从业务上思考,更换实现方式,减少类似大数据量传参。

参考:

tomcat(8.5)修改 http请求头部的最大长度_tomcat设置请求头大小_zhangtxsir的博客-CSDN博客

 


http://www.ppmy.cn/news/441086.html

相关文章

03_Linux设备树与设备树语法

目录 什么是设备树 DTS、DTB和DTC DTS语法 dtsi头文件 设备节点 标准属性 compatible属性 model属性 status属性 #address-cells和#size-cells属性 reg属性 ranges属性 name属性 device_type属性 根节点compatible属性 使用设备树之前设备匹配方法 使用设备树以…

AGM FPGA与CPLD烧录说明

AGM的产品系列主要是CPLD和FPGA两种&#xff0c;FPGA目前容量是从6KLE~16KLE有多个型号&#xff0c;不同的系列&#xff0c;我们也开发有相应的开发板&#xff0c;方便首次使用的时候快速上手。以下分享一些AGM 的知识点。AGM芯片-烧写文件类型&#xff1a; 1、AG256 / 272 / 5…

AGM AG1280 CPLD

AG1280是超低成本和功率的QFN-48 6X6和QFN-32 4x4 0.8毫米&#xff08;实际0.77毫米&#xff09;厚度封装&#xff0c;可完美替换Altera EPM1270。 芯片具有1280个LUT和最多40个用户IO&#xff0c;提供68kbits嵌入式RAM块和10位分布式RAM&#xff0c;每个设备一个PLL提供时钟倍…

AGM FPGA选型手册

AGM Micro是领先的可编程SoC、通用32位MCU、和异构&#xff08;MCU&#xff09;边缘计算芯片和方案提供商&#xff0c;是一家民营公司&#xff0c;致力于为消费电子、工业和AIoT中高量市场提供智能化的设计软件和芯片系统。AGM针对不同的纵向应用市场&#xff0c;并拥有19个知识…

tewa600agm是千兆吗_请问电信天翼网关光纤猫超级用户 型号tewa-600aem/tewa600agm

答&#xff1a;您好 电信光纤猫自己一般是不能设置的&#xff0c;如果需要设置&#xff0c;需要电信装维工作人员使用专用的帐号和密码才能登陆设置的。 答&#xff1a;天翼tewa-600aem支持路由拨号模式的。 1、首先将电脑连接至光猫自带的热点上&#xff0c;此时电脑虽然连接了…

boost::math模块使用 agm 以高精度计算 lemniscate 常量

boost::math模块使用 agm 以高精度计算 lemniscate 常量 实现功能C++实现代码实现功能 boost::math模块使用 agm 以高精度计算 lemniscate 常量 C++实现代码 #include <iostream> #include <boost/math/tools/agm.hpp> #include <boost/math/constants/const…

tewa600agm是千兆吗_电信天翼网关光纤猫超级用户 型号tewa-600aem/tewa600agm怎么样?...

答&#xff1a;您好 电信光纤猫自己一般是不能设置的&#xff0c;如果需要设置&#xff0c;需要电信装维工作人员使用专用的帐号和密码才能登陆设置的。 答&#xff1a;网关注册SN号后插千兆口就可以上网了。 方法&#xff1a; INTERNET-R-VID-41改为路由拨号上网 TR069-VOICE-…

AGM FPGA PIN TO PIN兼容ALTERA FPGA

AGM Micro是领先的可编程SoC、通用32位MCU、和异构&#xff08;MCU&#xff09;边缘计算芯片和方案提供商&#xff0c;是一家民营公司&#xff0c;致力于为消费电子、工业和AIoT中高量市场提供智能化的设计软件和芯片系统。AGM针对不同的纵向应用市场&#xff0c;并拥有19个知识…