为什么SpringMVC不限制输入流(如WebFlux)在内存中缓冲的最大字节数?

xbp102n0  于 2023-05-21  发布在  Spring
关注(0)|答案(1)|浏览(210)

我第一次在Spring WebFlux应用程序中注意到这个错误:
org.springframework.core.io.buffer.DataBufferLimitException:超出缓冲区最大字节数限制:262144
所以WebFlux有一个限制,它在反序列化客户端负载时会检查,如文档中所述。我很想知道为什么在Spring Web MVC中不进行此检查。是最新的WebFlux的创新,还是有技术原因?

but5z9lq

but5z9lq1#

WebFlux的一个特性是它能够将传入的请求作为流处理(这在Spring MVC中是不可用的)。这意味着输入请求的流可能是无限的,从而导致可能的“内存不足”问题。这就是为什么WebFlux的Decorer s和HttpMessageReader s通过它们的maxInMemorySize属性提供了一个有用的特性。Thay可以计算传入块的大小,并在累积大小超过指定限制时触发DataBufferLimitException
其实施的原因可以追溯到原始问题,可以在以下位置找到:https://github.com/spring-projects/spring-framework/issues/23884
代码可在此处获得:https://github.com/spring-projects/spring-framework/commit/871464811cc1b18d684408f71725cead20c70796

相关问题