Как определить, использует ли Spring WebClient HTTP / 2?

Я хотел бы знать, использует ли Spring WebClient HTTP / 2. Как я могу это определить?


person pixel    schedule 21.12.2019    source источник


Ответы (3)


Серверная поддержка HTTP / 2

Начиная с Spring Framework 5.1 (Reactor Netty 0.8), этот сервер также поддерживает HTTP / 2. Развертывания JDK9 + будут поддерживать этот протокол без особых изменений инфраструктуры.

Reactor - это базовый http-клиент, который используется Spring WebClient. Начиная с Spring Framework 5.1 эта поддержка HTTP / 2.

См. Также Spring Framework: поддержка HTTP / 2 для обзор.

HTTP / 2 согласовывается для каждого подключения

Если ваш запрос соединение использует HTTP / 2 или HTTP / 1.1, согласовывается для каждого соединения между клиентом и сервером с использованием ALPN. Сервер представляет, какие версии http он поддерживает, тогда клиент выбирает HTTP / 2, если его поддерживают обе части. Это делается через TLS в рукопожатии, поэтому его нельзя обнаружить без разрыва TLS-соединения.

person Jonas    schedule 11.01.2020

Spring WebClient по умолчанию использует ReactorClientHttpConnector (реализация ClientHttpConnector в Reactor-Netty). И согласно этому wiki Netty http-client уже поддерживает HTTP / 2.

Если вы хотите проверить, использует ли ваш Spring WebClient HTTP / 2, вы можете использовать такие инструменты, как Wireshark для перехвата ваших запросов. и проанализируйте, какой протокол он использует.

person Akhil Bojedla    schedule 09.01.2020
comment
как упоминал @Jonas - HTTP2 находится за TLS, поэтому невозможно проверить без завершения TLS-соединения, поэтому только Wireshark недостаточно - person pixel; 15.01.2020

Я видел этот ответ в stackoverflow:

response.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: success, version: HTTP / 1.1, content: UnpooledByteBufAllocator $ InstrumentedUnpooledUnsafeHeapByteBuf (ridx: 0, widx: 0, cap: 0)) GET / api / v1 / watch / namespaces /1.1

Возможно, я ошибаюсь, но разве вам не нужен HTTP / 1.1? Если да, проверьте эту ветку:

как регистрировать вызов Spring 5 WebClient

person Curious Mind    schedule 14.01.2020
comment
afaik, вы не можете увидеть, использовался ли HTTP2 с уровня http - он присутствует на уровне TCP / TLS - person pixel; 15.01.2020