我们正在使用tomcat 7.0.67,它几乎是tomcat7的最新tomcat版本。 我们发现在运行一些性能测试之后,tomcat不会发送chunked响应正确。 它不会发回"最后一块"应该是ZERO长度。当tomcat服务器上没有请求时,问题仍然存在。 有没有人见过这个?它有解决方法吗?
答案 0 :(得分:1)
我找到了原因。我们正在使用异步任务。 在前台线程中,我们在某些情况下调用ServletOutputStream.flush。 在tomcat中,ServletOutputStream.flush将导致tomcat开始计算所需的tomcat的OutputFilter。 IdentityOutputFilter用于非块响应。如果存在" connection:close"将使用IdentityOutputFilter。标题或"内容长度"冲洗时设置。 ChunkedOutputFilter用于分块响应
但后台线程可能仍在处理并使用ServletOutputStream。 在某些情况下,这种过早刷新将使tomcat链接IdentityOutputFilter和ChunkedOutputFilter。 这可能不是tomcat所期望的那样,并且chunked响应开始不起作用。
解决方法不是在前台线程中调用flush,但我相信它仍然是一个tomcat错误,因为tomcat chunked响应不应该停止工作,即使webapp调用过早刷新。