问题起因
今天将 Spring4.x 升级到 5.2.x 因为 Spring5.2.x基于Tomcat8及以上, 所以把之前用的 Tomcat也从6.x升级到8.x
问题详情
GET请求: 一切正常, 参数都可以获取到
POST请求: 所有前端提交的表单数据丢失 , 参数无法获取.
问题排查
- 尝试修改SpringMVC相关的配置,Debug求情流程 -> 无解
- 将Tomcat8换成了 Jetty -> 恢复正常
Jetty下没问题 所以肯定是Tomcat8的问题
Tomcat6.x 配置分析
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" acceptCount="512" maxThreads="2048" useBodyEncodingForURI="true" maxPostSize="0"/>
这个是现有Tomcat6的配置, 其中有一个参数 maxPostSize="0" 是用来限制POST请求内容的大小限制的, 在Tomcat6.x下 , maxPostSize="0" 表示不限制POST请求大小, 但是在Tomcat8.x下, maxPostSize>="0" 则表示禁止POST请求,如果要不限制POST请求大小,则为 maxPostSize<"0" .
MaxPostSize
maxPostSize | Tomcat6.x | Tomcat 8.x |
---|---|---|
maxPostSize = 0 | 不限制 | 禁止POST请求 |
maxPostSize > 0 | 指定大小 | 指定大小 |
maxPostSize < 0 | -- | 不限制 |
问题解决
只需要将 maxPostSize 改成小于0的即可
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" acceptCount="512" maxThreads="2048" useBodyEncodingForURI="true" maxPostSize="-1"/>
网友评论