如何确定 Spring WebClient 是否正在使用 HTTP/2?
How to determine if Spring WebClient is using HTTP/2?
我想知道 Spring WebClient 是否正在使用 HTTP/2。我如何确定?
Spring WebClient 默认使用 ReactorClientHttpConnector
(ClientHttpConnector
的 Reactor-Netty 实现)。根据这个 wiki Netty http-client 已经支持 HTTP/2。
如果您想检查您的 Spring WebClient 是否正在使用 HTTP/2,您可以使用 Wireshark 等工具来拦截您的请求并分析它使用的协议。
服务器支持 HTTP/2
As of Spring Framework 5.1 (Reactor Netty 0.8), this server supports as well HTTP/2. JDK9+ deployments will support that protocol without specific infrastructure changes.
Reactor 是 Spring WebClient 使用的底层 http 客户端。从 Spring Framework 5.1 开始支持 HTTP/2.
另请参阅 Spring Framework: HTTP/2 support 了解概览。
HTTP/2 每个连接协商
您的请求 连接 是否使用 HTTP/2 或 HTTP/1.1 是 协商 每个客户端之间的连接和服务器使用 ALPN。服务器 提供 它支持的 http 版本,然后客户端选择 HTTP/2 如果两个部分都支持它。这是在握手中通过 TLS 完成的,因此在不终止 TLS 连接的情况下无法检测到它。
我在 Whosebug 上看到了这个答案:
reactor.ipc.netty.channel.ChannelOperationsHandler 为您完成。只需为 class 配置您的日志系统以在 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] 写入对象 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 不是您想要的输出吗?
如果是这样,请查看此线程:
我想知道 Spring WebClient 是否正在使用 HTTP/2。我如何确定?
Spring WebClient 默认使用 ReactorClientHttpConnector
(ClientHttpConnector
的 Reactor-Netty 实现)。根据这个 wiki Netty http-client 已经支持 HTTP/2。
如果您想检查您的 Spring WebClient 是否正在使用 HTTP/2,您可以使用 Wireshark 等工具来拦截您的请求并分析它使用的协议。
服务器支持 HTTP/2
As of Spring Framework 5.1 (Reactor Netty 0.8), this server supports as well HTTP/2. JDK9+ deployments will support that protocol without specific infrastructure changes.
Reactor 是 Spring WebClient 使用的底层 http 客户端。从 Spring Framework 5.1 开始支持 HTTP/2.
另请参阅 Spring Framework: HTTP/2 support 了解概览。
HTTP/2 每个连接协商
您的请求 连接 是否使用 HTTP/2 或 HTTP/1.1 是 协商 每个客户端之间的连接和服务器使用 ALPN。服务器 提供 它支持的 http 版本,然后客户端选择 HTTP/2 如果两个部分都支持它。这是在握手中通过 TLS 完成的,因此在不终止 TLS 连接的情况下无法检测到它。
我在 Whosebug 上看到了这个答案:
reactor.ipc.netty.channel.ChannelOperationsHandler 为您完成。只需为 class 配置您的日志系统以在 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] 写入对象 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 不是您想要的输出吗? 如果是这样,请查看此线程: