1

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

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

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

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

有没有办法强制服务器应用程序响应Transfer-Encoding: chunked

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

它以某种方式可配置吗?

4

2 回答 2

4

通过在响应中设置 BufferSize。

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

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

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

于 2017-05-23T09:37:53.417 回答
2

服务器应用程序将响应您希望它响应的方式,具体取决于请求 http 标头。

如果请求 http 标头包含:

Accept-Encoding: chunked

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

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

于 2017-05-26T08:03:42.447 回答