禁用transfer-encoding:在Spring Webflux响应中分块

时间:2018-02-02 02:39:41

标签: spring spring-boot spring-webflux spring-web

我使用Spring Webflux反​​应库创建了大量REST API端点。我现在面临的问题是,Webflux返回的响应有 transfer-encoding:chunked HTTP标头。由于哪个客户端应用程序使用像Axios(https://github.com/axios/axios)这样的库承诺基于HTTP客户端来自浏览器javascript失败。我们如何关闭 transfer-encoding:chunked

使用curl从Spring webflux应用程序响应示例:

< HTTP/1.1 200 OK
< transfer-encoding: chunked
< Content-Type: application/json;charset=UTF-8
<
[{"default_project_id":"admin","description" .......
"name":**"use* Connection #0 to host 10.1.0.9 left intact**
r1"}},"links":{"self":"http://10.10.10.51:5000/v3/users/f6ee9d6217404d2ba73f323edff06bf8"},
"password_expires_at":null,
"id":"f6ee9d6217404d2ba73f323edff06bf8"}]

请帮忙。我看到了整个响应,但响应的分块正在抛弃http客户端库,特别是从Web浏览器中消耗它们。

1 个答案:

答案 0 :(得分:0)

我不认为您可以使用Reactor Netty(Spring Boot + WebFlux使用的默认服务器)禁用分块编码。另一种方法是设置Content-Length标头,这意味着在将整个响应写入网络之前缓冲整个响应。这对于背压支持来说并不是最佳选择。

我查找了axios客户端,但我发现了opened issue about HTTP streaming support,这与Transfer-Encoding: chunked不同。你能详细说明你是如何得出这个结论的吗?