7

我想知道 Spring WebClient 是否使用 HTTP/2。我怎么能确定呢?

4

3 回答 3

5

Spring WebClient 默认使用ReactorClientHttpConnector(A Reactor-Netty implementation of ClientHttpConnector)。根据这个wiki Netty http-client 已经支持 HTTP/2。

如果您想检查您的 Spring WebClient 是否使用 HTTP/2,您可以使用Wireshark之类的工具来拦截您的请求并分析它使用的协议。

于 2020-01-09T13:13:47.487 回答
3

服务器支持 HTTP/2

从 Spring Framework 5.1 (Reactor Netty 0.8) 开始,该服务器也支持 HTTP/2。JDK9+ 部署将支持该协议,而无需更改特定的基础架构。

Reactor 是 Spring WebClient 使用的底层 http 客户端。从 Spring Framework 5.1 开始,它支持 HTTP/2。

另请参阅Spring Framework:HTTP/2 支持以获取概述。

每个连接协商 HTTP/2

您的请求连接是使用 HTTP/2 还是 HTTP/1.1 是使用ALPN协商每个客户端和服务器之间的连接。服务器显示它支持的 http 版本,然后如果两个部分都支持,则客户端选择 HTTP/2。这是通过握手中的 TLS 完成的,因此在不终止 TLS 连接的情况下无法检测到它。

于 2020-01-11T08:56:39.410 回答
2

我在stackoverflow上看到了这个答案:

reactor.ipc.netty.channel.ChannelOperationsHandler 为您完成。只需将您的日志系统配置为该类以在 DEBUG 级别进行日志记录。

输出类似于:

2017-11-23 12:52:04.562 调试 41449 --- [ctor-http-nio-5] rinchannel.ChannelOperationsHandler : [id: 0x9183d6da, L:/127.0.0.1:57681 - R:localhost/127.0.0.1: 8000] 写入对象 DefaultFullHttpRequest(decodeResult:成功,版本:HTTP/1.1,内容:UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0)) GET /api/v1/watch/namespaces/default/events HTTP/ 1.1

也许我错了,但 HTTP/1.1 不是您想要的输出吗?如果是这样,请检查此线程:

如何记录 Spring 5 WebClient 调用

于 2020-01-14T17:32:54.343 回答