有什么方法可以配置响应的最大标头大小吗?
我从 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>
有什么想法吗?
您可以将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();
在 Spring Boot 应用程序中,最大 HTTP 标头大小使用以下方式配置:
server.max-http-header-size=65536
我发现这解决了 Spring Cloud Gateway 上的上述问题,所以值得一试。
我遇到了同样的问题,我可以使用以下配置修复它。
server.max-http-request-header-size: 40000
这适用于 Spring Boot 3.0,因为之前的
server.max-http-header-size
属性已被弃用。
我遇到了这样的问题。我可以通过谷歌浏览器通过终端打开此链接。没关系,但如果我使用 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}")
}
}