[英]Send an http request through a specific network interface using Spring WebClient
[英]Java Spring Webflux WebClient - send http request using HTTP2
關於如何使用 Webflux WebClient 發送 HTTP2 請求的小問題。
我們的第三方 API 進行了升級,現在他們支持 HTTP2。
因此,我相信作為客戶,利用這次升級是值得的。
但是,目前,我相信我只發送 HTTP1。 為了確認,我看到了第三方端的訪問日志,看起來請求確實是HTTP1。
我有一個 WebClient bean,並使用 bean 發送請求。
WebClient.create().mutate().defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).clientConnector(new ReactorClientHttpConnector(HttpClient.create().wiretap(true).secure(sslContextSpec -> sslContextSpec.sslContext(getSslContext())))).build()
public Mono<ThirdPartyResponse> sendAnHTTP2RequestToThirdParty(ThirdPartyRequest request, Map<String, String> headers) {
return webClient.mutate()
.baseUrl(configuration.getThirdPartyUrl())
.build()
.post()
.uri(ROUTE_ThirdParty)
.headers(httpHeaders -> httpHeaders.setAll(headers))
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(request))
.retrieve()
.bodyToMono(ThirdPartyResponse.class);
}
請問我缺少什么配置或代碼?
謝謝
Spring 團隊的回應:
Reactor Netty 提供了兩種類型的 SslContext 配置:
https://projectreactor.io/docs/netty/release/api/reactor/netty/tcp/SslProvider.SslContextSpec.html
您可以提供 SslContext 或 SslContextBuilder。
在您的用例中,您為 HttpClient 提供 SslContext ,因此我們不會觸及它。 但是,該 SslContext 中沒有對 HTTP/2 支持的配置,在這種情況下,客戶端和服務器將嘗試協商以使用 HTTP/1.1 協議。
解決方案:
使用支持 HTTP/2 的配置擴展 SslContext 或提供 SslContextBuild 和 Reactor Netty 將能夠應用一些默認的 HTTP/2 配置
已驗證,現在這對我來說很震撼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.