WebClient 最大标头大小

问题描述 投票:0回答:4

有什么方法可以配置响应的最大标头大小吗?

我从 netty 框架中收到以下错误:

io.netty.handler.codec.TooLongFrameException: HTTP header is larger than 8192 bytes.
    at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:983)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 

显然reactor为此添加了一个API,但我不明白这在spring Web Flux的WebClient中是如何可控的。我用的是以下版本

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>2.3.2.RELEASE</version>
      </dependency>

有什么想法吗?

spring-webflux response-headers reactor-netty
4个回答
6
投票

您可以将reactor的

reactor.netty.http.client.HttpClient
配置为具有自定义
maxHeaderSize
并将此预配置的
HttpClient
插入您的WebClient实例中。

HttpClient httpClient =
    HttpClient.create().httpResponseDecoder(spec -> spec.maxHeaderSize(32 * 1024));

WebClient webClient =
    WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient))
    .build();

2
投票

在 Spring Boot 应用程序中,最大 HTTP 标头大小使用以下方式配置:

server.max-http-header-size=65536

我发现这解决了 Spring Cloud Gateway 上的上述问题,所以值得一试。


1
投票

我遇到了同样的问题,我可以使用以下配置修复它。

server.max-http-request-header-size: 40000

这适用于 Spring Boot 3.0,因为之前的

server.max-http-header-size
属性已被弃用。


0
投票

我遇到了这样的问题。我可以通过谷歌浏览器通过终端打开此链接。没关系,但如果我使用 webClient,我会遇到标题大小的问题。 我用了很多方法来解决这个问题。

结果,我尝试使用OkHttpClient,并得到了正确的结果!!!:

val client = OkHttpClient()

    val request = Request.Builder()
        .url("https://example.com")
        .build()

    client.newCall(request).execute().use { response ->
        if (response.isSuccessful) {
            val responseBody: ResponseBody? = response.body
            val responseString = responseBody?.string()
            println(responseString)
        } else {
            println("Error: ${response.code}")
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.