【问题标题】:Java Spring Webflux WebClient - send http request using HTTP2Java Spring Webflux WebClient - 使用 HTTP2 发送 http 请求
【发布时间】:2021-01-29 01:09:44
【问题描述】:

请教关于如何使用 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);
    }

请问我缺少什么配置或代码?

谢谢

【问题讨论】:

  • 您能指定您想要利用哪些 HTTP/2 功能吗?
  • 我相信有很多,但只是说一些,新的对JWT的更好的支持,每个通知的反馈可能会很有趣。总的来说,只是想开始这个 HTTP2 迁移,但是,由于某种我不知道的原因,我发送的所有请求仍然是 HTTP1。我什至尝试使用 curl,虽然 curl 命令可以产生 HTTP2 请求,但 Web 客户端似乎仍然发送 HTTP1 请求
  • 好吧,您发布的信息太少,无法回答这个问题,这取决于您拥有的服务器、您正在运行的 java 版本等。在这里您可以阅读 springs 文档对此有何评论github.com/spring-projects/spring-framework/wiki/HTTP-2-support
  • 我的意思是,我不是在问 Spring 是否支持它,它写在它支持的文档中。我的问题更像是:Spring 应该支持它。我正在使用弹簧。为什么我的请求仍然以 HTTP1 形式发出?

标签: java spring-webflux


【解决方案1】:

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 配置

已验证,现在对我来说很震撼

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2020-01-30
    • 2021-10-26
    • 2022-01-18
    • 2019-12-20
    • 2019-08-02
    • 2022-01-25
    • 2020-07-12
    相关资源
    最近更新 更多