如何确定Spring WebClient是否使用HTTP/2?

10

我想知道Spring WebClient是否使用HTTP/2。我该如何确定?

3个回答

7

Spring WebClient 默认使用 ReactorClientHttpConnector (一个 Reactor-Netty 实现的 ClientHttpConnector)。根据这个 wiki,Netty http-client 已经支持 HTTP/2。

如果您想要检查您的 Spring WebClient 是否正在使用 HTTP/2,可以使用像 Wireshark 这样的工具拦截您的请求并分析它所使用的协议。


正如 @Jonas 所提到的 - HTTP2 是在 TLS 后面,因此如果不终止 TLS 连接,则无法进行检查,因此仅使用 Wireshark 不足以完成。 - pixel

6

支持HTTP/2的服务器

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

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

有关概述,请参见Spring框架:HTTP/2支持

每个连接都会协商HTTP/2

您的请求连接是使用HTTP/2还是HTTP/1.1是通过客户端和服务器之间的ALPN协商来确定的。服务器呈现其支持的http版本,然后客户端在双方都支持时选择HTTP/2。这是通过TLS握手完成的,因此在终止TLS连接之前无法检测到它。


2
我看到了这篇stackoverflow上的答案:
`reactor.ipc.netty.channel.ChannelOperationsHandler`可以为您完成。只需将您的日志系统配置为以DEBUG级别记录该类即可。
输出可能如下所示:
``` 2017-11-23 12:52:04.562 DEBUG 41449 --- [ctor-http-nio-5] r.i.n.channel.ChannelOperationsHandler : [id: 0x9183d6da, L:/127.0.0.1:57681 - R:localhost/127.0.0.1:8000] Writing object DefaultFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0)) GET /api/v1/watch/namespaces/default/events HTTP/1.1 ```
也许我错了,但是HTTP/1.1不是您想要的输出吗? 如果是这样,请查看这个帖子:how to log Spring 5 WebClient call

据我所知,您无法从HTTP级别看到是否使用了HTTP2 - 它存在于TCP / TLS级别。 - pixel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接