(spring-boot,cxf,tomcat)Content-Length与Transfer-Encoding:chunked?

时间:2017-05-16 14:25:57

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

我正在尝试修复问题。 http response-header:Transfer-Encoding: chunked

我们在spring-boot + embedded-tomcat中有一个CXF-SOAP web服务。

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

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

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

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

它是否可以配置?

2 个答案:

答案 0 :(得分:1)

通过设置BufferSize响应。

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

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

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

答案 1 :(得分:1)

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

如果请求http标头包含:

Accept-Encoding: chunked

且仅chunked,服务器应用将使用标头和内容Transfer-Encoding: chunked进行回复。

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