之前做一个数据上传的功能,前端读取excel然后回传json给后端进行保存。有一次传了一个4兆多的数据包,然后就报错了,减少数据量后是正常的,于是猜测是数据过大导致的,又想到之前传文件的时候用'Content-Type':'application/octet-stream'进行传输,是OK的,于是就把前端的请求头的Content-Type改成application/octet-stream,并且将数据用Blob转成二进制大对象进行传输,后端用request.getInputStream()读取数据并转换使用,这样就可以接收大数据包的上传了。
后面通过查阅资料发现其实不用修改代码,直接修改tomcat的maxPostSize参数也可以实现大数据的接收,测试之后发现确实如此。于是就有了疑惑,都是post请求,为什么采用application/octet-stream传输数据的大小可以不受maxPostSize的限制呢?另外,tomcat如何对使用application/octet-stream进行传输的数据大小进行限制呢?
Tomcat 在处理 HTTP 请求时,可以通过配置 maxPostSize 参数来限制请求体的最大大小。但是需要注意的是,maxPostSize 参数主要是针对普通的 POST 请求,特别是表单数据等的处理。对于 application/octet-stream 类型的请求体,这个参数的限制并不直接生效,因为这种类型的请求不会被 Tomcat 解析为表单数据。