栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

post请求,参数过长导致请求400

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

post请求,参数过长导致请求400

背景

近期参与项目,有一个功能在线标注非结构化数据,并把标注内容保存在后台,功能如下:

意外就这样不出意外的出现了,保存请求400

排查 第一阶段

参数key没有对应上吗?事与愿违,如果这么简单,这篇贴子就不会出现了 第二阶段

在前段调试的时候,有一个参数parmas.wsContent引起了我的怀疑:2M?!

去掉这个参数,请求成功这个参数截取前50个字符,请求成功 第三阶段

经过第二阶段基本确定是参数过长导致的请求400

网上也确实有说tomcat通过maxPostSize参数限制post请求的参数需要修改为maxPostSize<=0即可 修改server.xml的Connector标签,增加maxPostSize=0

为什么我改为0不用负数?这就是我随便写的。这正是我这个随便,产生了第四阶段的排查 增加maxPostSize后,意外再次不出意外的出现,artery解析空指针(没有获取到itemid)

Caused by: java.lang.reflect.InvocationTargetException: null
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.thunisoft.artery.util.ArteryReflectUtil.invokeMethod(ArteryReflectUtil.java:97)
	... 70 common frames omitted
Caused by: java.lang.NullPointerException: null
	at com.thunisoft.artery.parse.visitor.FindItemByIdVisitor.(FindItemByIdVisitor.java:23)
	at com.thunisoft.artery.service.plugin.util.ArteryPluginUtil.findItemById(ArteryPluginUtil.java:38)
	at com.thunisoft.artery.form.FormEngine.runItemscript(FormEngine.java:419)
	... 75 common frames omitted
第四阶段

我尝试着把maxPostSize=-1,请求竟然成功了tomcat官网的maxPostSize参数解释:

less than or equal to 0默认2M,单位是byte(我在排查第三阶段尝试过maxPostSize=10240,我以为单位是kb)
为什么maxPostSize=0没用?

之前的less than or equal to 0的tomcat版本5.5,当时没有注意后续tomcat版本这个参数已经变为less than zero了

tomcat的changelog

在tomcat7.0.63版本这个参数就调整为负数了

jetty的相关配置

为什么产品一直没有出现问题,难道是jetty默认这个参数比较大?

本地搭建jetty,启动,发现请求依旧400,只是描述变成了unable to parse form content网上说这个错误和postSize参数导致

jetty的配置参数,jetty的配置文件已经增加了注释

springboot的内置tas参数

com.thunisoft.tas.springboot.autoconfigure.config.props.TasProperties默认200KB

 @NestedConfigurationProperty
 private DataSize maxHttpPostSize = DataSize.ofBytes(200000L);
总结 前端和后台参数key对应不上和前端请求参数过长都会导致post请求返回码400。

解决方案:

统一前后端参数key修改中间件MaxPostSize参数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750128.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号