吐槽吐槽:生产环境突然冒出个打开表单错误,去浅浅的排查下,排查复现不出问题原因,就直接后台处理数据了,事那么多,CPU都要干爆了,谁有空去慢慢查。结果好景不长,过两天又冒出来,就很无语。正好闲的发慌,想去看看是什么妖魔鬼怪,岂敢打扰我摸鱼的快乐!
前言:我的是Tomcat应用,今天遇到个POST请求前端参数正常,后端参数消失不见了?最后排查结果是:
post请求参数大于Tomcat所设置的最大POST请求限制,导致后端接收不到前端传入的参数,最后系统异常报错!
Tomcat默认的最大POST请求参数是2M,但是我的请求参数已经6M左右了,导致功能异常,最后设置更改了最大POST请求参数,问题也解决了,特此记录下这次美好的相遇!!!
希望下次再见,你我不再陌生!!!
处理结果看最后————————
一个小时过去了…………
测试环境复现不出问题所在,一脸懵逼…………
两个小时过去了…………
连接生产,断点排查,卧槽,前端有参数进来,但是到后端,参数不见了???
@RequestMapping("complete")
public void complete(HttpServletRequest request, HttpServletResponse response) throws Exception {
String taskId = RequestUtil.getString(request, "taskId");
String actionName = RequestUtil.getString(request, "actionName");
String opinion = RequestUtil.getString(request, "opinion");
String data = RequestUtil.getString(request, "data", false);
}
问题排查中………………
找到可疑对象,前端显示content-Length长度6529831,折合6.2M左右
那么这个长度大小有什么影响呢?
长度大于服务器POST请求参数大小的设置,会导致异常报错,,然而我这是后台接收不到前端参数(具体原理找度娘)
怎么解决呢?
更改POST请求体最大限制
怎么更改呢?
在Tomcat的conf文件夹中找到server.xml文件中找到Connector标签,添加maxPostSize="10485760" 属性,这是设置POST请求体最大设置,这里的单位是字节,我这里设置的是10M=10485760B,设置好之后,重启服务,再次测试,完成!
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
maxPostSize="10485760"
/>