【发布时间】: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