【问题标题】:(spring-boot, cxf, tomcat) Content-Length vs Transfer-Encoding: chunked?(spring-boot,cxf,tomcat)内容长度与传输编码:分块?
【发布时间】:2017-05-16 14:25:57
【问题描述】:

我正在尝试解决问题。 http响应头:Transfer-Encoding: chunked

我们在 spring-boot + Embedded-tomcat 中有一个 CXF-SOAP webservice。

SOAP 响应获得 Content-Length 标头,但没有 Transfer-Encoding .... 我猜这是正常的?

不幸的是,我们有一些遗留的客户端黑客, 这似乎只适用于Transfer-Encoding: chunked 而没有Content-Length

有没有办法强制服务器应用回复Transfer-Encoding: chunked

究竟是什么决定了生成哪种响应格式?

它可以以某种方式配置吗?

【问题讨论】:

    标签: tomcat soap spring-boot cxf transfer-encoding


    【解决方案1】:

    通过在响应中设置 BufferSize。

    response.setBufferSize() 设置响应大小的 Content-Length 标头。一旦响应大小超过 bufferSize,它将回退到 Transfer-Encoding: Chunked。缓冲区大小应设置为适当的值。将其设置为更高的值将在刷新之前缓冲内存中的所有响应。所以这个值应该设置为一个乐观的大小。

    默认情况下 Tomcat 缓冲区大小设置为 8K

    其他选项:您可以为您的服务添加响应过滤器,并在您想要的设置标题中。

    【讨论】:

      【解决方案2】:

      服务器应用会根据请求的 http 标头响应您希望它响应的任何方式。

      如果请求http头包含:

      Accept-Encoding: chunked
      

      并且只有chunked,服务器应用程序将响应标题和内容Transfer-Encoding: chunked

      因此,如果无法发出正确的表明客户端能力的 http 请求,可以添加反向代理,通过更改或添加 Accept-Encoding: chunked 标头来修改请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-20
        • 2012-02-07
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        • 2011-10-18
        • 2014-05-25
        相关资源
        最近更新 更多