【问题标题】:tomcat does not send last chunk for chunked responsetomcat 不会为分块响应发送最后一个块
【发布时间】:2015-12-15 03:23:55
【问题描述】:

我们使用的是 tomcat 7.0.67,它几乎是 tomcat7 的最新 tomcat 版本。 我们发现,经过一些性能测试后,tomcat 发送的分块响应不正确。 它不会发回应该是零长度的“最后一个块”。当 Tomcat 服务器上没有请求时,问题仍然存在。 有人见过这个吗?有解决办法吗?

【问题讨论】:

  • 或者谁能指出tomcat中关于计算分块响应的代码是什么,以便我们可以对此进行调试?

标签: tomcat tomcat7


【解决方案1】:

我找到了原因。我们正在使用异步任务。 在前台线程中,我们在某些情况下调用 ServletOutputStream.flush。 在tomcat中,ServletOutputStream.flush会导致tomcat开始计算需要的tomcat的OutputFilter。 IdentityOutputFilter 用于非块响应。如果刷新时设置了“connection:close”标头或“content-length”,则将使用 IdentityOutputFilter。 ChunkedOutputFilter 用于分块响应

但后台线程可能仍在处理和使用 ServletOutputStream。 在某些情况下,这种过早的刷新将使 tomcat 链接 IdentityOutputFilter 和 ChunkedOutputFilter。 这可能不是 tomcat 所期望的,并且分块响应开始不起作用。

解决方法不是在前台线程中调用flush,但我相信它仍然是一个tomcat错误,因为tomcat分块响应不应该停止工作,即使webapp过早调用flush。

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多