Post提交大数据量,接收端接收不到数据的解决方法

Post提交大数据量,接收端接收不到数据的解决方法

相信很多人都知道post提交是不限制提交的数据量大小的,这是事实。但是,在实际的开发中还是会遇到post提交大数据量,接收端接收不到的问题。最近我就遇到了这么一个问题,折腾了好久最后没办法,于是求救老大,老大稍微点拨一下,就发现了问题所在,后来通过查询资料,才搞明白原因所在。好吧,先说下原因:post提交本身提交的数据量是不限制大小的,但是会受限于接收数据的服务器的配置影响,更具体点,如果使用的是tomcat服务器,可以在tomcat服务器中配置接收post提交的数据量大小,如果tomcat限制了接收post数据量的大小,那么客户端发送的数据量超出了这个限制,服务器端就无法接收到数据。我遇到的问题就是因为tomcat限制了接收post数据的大小,导致服务器端一直无法接收到数据。
我的场景是这样子的,两个webservice服务,其中一个webservice服务当作源服务,调用这个服务获取一批数据,然后经过一些处理后再把这批数据发送到另一个webservice服务,发送数据时用post方式提交。在测试时,如果数据量比较少的时候,能够正确的获取数据和发送数据,接收端也能正确的得到数据。但是有一次测试,一批数据量比较大,超过了2M,接收端居然无法接收数据了,刚开始没想到是数据量的问题(笨啊!!!),因为很清楚的知道post提交时是不限制数据量大小的,后来折腾了很久,求救老大,老大刚开始也不知道原因,提示一下减少数据量试试,照做,经测试发现接收端居然可以接收到数据了,所以可以确定是因为发送的数据量太大了。着实很无语,后来通过查询相关资料发现,造成这个问题并不是post发送数据量大小的原因,根本原因是因为接收数据的webservice服务在tomcat上运行,而tomcat默认情况下是接收不超过2M的数据,如果超出了就会舍弃数据,所以造成接收不到数据的情况。官网说明如下:

从截图可以看到,tomcat默认最大接收post的数据为2M,并且可以通过设置为小于0的数来解除这个限制。那么,这个配置可以通过在service.xml的connector的节点中配置:

上图配置tomcat最大可以接收post的最大数据量为10M。

另外,从官网上看到,除了tomcat会限制接收的post数据量大小外,还会限制请求头的个数、请求参数的个数,如果在实际的应用中无法接收到请求头的信息或者请求参数的信息,可以排查一下是否是因为tomcat的限制所导致。不过tomcat默认的限制已经是很大了,一般情况下也不会因为这个限制而导致系统出现问题。

总结:遇到在不同环境下会出现奇葩的问题,一定要仔细考虑不同环境下的区别,这样可以帮助我们更快地定位问题。

推荐阅读