最近在实际中碰到了一个情况,明明tomcat已经设置了请求体大小是10M,但是2M的数据都无法发送过去。
但是同样的数据,用restTemplate来组装发送就可以发送成功。
用抓包工具,重新点击发送数据,只要数据超过2M,就会报错(走的是负载均衡的,https协议),
但是如果直接用ip向服务器发送(数据量大于2M),就可以成功(走的是http协议,虽然请求一些设置为了https,但是用抓包工具看,走的协议是http)
经过对比发现了:就是走Https的不可以,走http就可以
最终查看tomcat的配置发现
虽然启用了Https,但是实际上配置的端口是80端口,访问的时候,是域名访问,不带端口号,https默认走了443端口,而tomcat的请求体大小默认限制是2m,我们系统放开端口数据大小是在80端口,而不是在443端口
修改为如下后即可:
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
URIEncoding="UTF-8" clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/keystore.jks" keystorePass="" maxPostSize="10485760" />
原本的tomcat配置:
<Connector port="80"
maxThreads="100000" minSpareThreads="0" maxSpareThreads="3000" acceptCount="80000"
scheme="https" proxyName="xxx.xxx.com.cn" proxyPort="443"
connectionTimeout="20000"
protocol="org.apache.coyote.http11.Http11NioProtocol"
也就是说:
如果你发送的是https协议,并且url中没有带有端口号,就会默认往443端口发。
如果你发送的是http协议,并且url中没有带有端口号,就会默认往80端口发。