Tomcat在并发请求上过早提交响应
我有一个问题,Tomcat8.5提交响应太早了。如果存在多个并发请求,则可能会在只添加四个小标题的筛选器之后直接提交响应(在我的示例中为Spring Security),因此我无法在servlet中再设置状态。是否有任何共享缓冲区或类似的东西,我可以增加,以避免这种行为Tomcat在并发请求上过早提交响应,tomcat,servlets,Tomcat,Servlets,我有一个问题,Tomcat8.5提交响应太早了。如果存在多个并发请求,则可能会在只添加四个小标题的筛选器之后直接提交响应(在我的示例中为Spring Security),因此我无法在servlet中再设置状态。是否有任何共享缓冲区或类似的东西,我可以增加,以避免这种行为 如果没有这样的配置,我必须以一种缓存头的方式包装响应,直到写入正文或响应准备就绪,是否有任何最佳实践或准备使用的实现?您确定(或spring)没有在servlet输出流或响应打印器上调用flush()?您可以在org.apach
如果没有这样的配置,我必须以一种缓存头的方式包装响应,直到写入正文或响应准备就绪,是否有任何最佳实践或准备使用的实现?您确定(或spring)没有在servlet输出流或响应打印器上调用
flush()
?您可以在org.apache.coyote.Response
中的volatile boolean committed=false
字段上设置访问断点,以检查谁提交了响应是的,我已经使用Springs记录了对响应的所有访问,这将刷新响应,我还编写了一个非常难看的java代理,使用ByteBuddy跟踪响应上的所有方法调用,并且只有spring security的addHeader()调用,下一步尝试设置由于响应已提交而无法工作的状态。我无法设置任何断点,因为如果使用调试器启动,则不会出现问题:(我已经考虑过更改tomcat源代码,并在使用new Exception()
提交响应时添加日志记录,以获得堆栈跟踪…头值有多大?如果内存响应的大小超过该缓冲区的大小,tomcat的缓冲区可以自动刷新。您可能只需要增加该缓冲区的大小。