簡體   English   中英

Java Spring Webflux WebClient - 使用 HTTP2 發送 http 請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM