Tomcat 9.0.16 Java 11 HTTP / 2 - PullRequest
       49

Tomcat 9.0.16 Java 11 HTTP / 2

1 голос
/ 12 марта 2019

Является ли TLS обязательным условием для использования HTTP / 2 на последних версиях Java и Tomcat?Могу ли я добавить <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/> к HTTP-порту 8080 и ожидать, что HTTP / 2 будет работать?Как на самом деле проверить / увидеть, что HTTP / 2 фактически используется вместо HTTP?Любой инструмент командной строки / браузера?Благодаря.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вы можете использовать curl -v --http2 localhost:8080 для проверки действий после применения UpgradeProtocol и перезапуска сервера Tomcat.

1 голос
/ 12 марта 2019

Как указано в HTTP-коннекторе :

HTTP / 2 обеспечивает поддержку TLS (h2), не-TLS через обновление HTTP (h2c) и прямой HTTP/ 2 (h2c) соединения.Чтобы включить поддержку HTTP / 2 для коннектора HTTP, следующий элемент UpgradeProtocol должен быть вложен в Connector с атрибутом className , равным org.apache.coyote.http2.Http2Protocol.

Это говорит о том, что TLS не является обязательным требованием.Вопрос все еще в том, поддерживает ли ваш браузер обновление h2c.

Используя Firefox, нажмите (F12), чтобы открыть инструменты разработчика, перейдите к Сетевой анализ .Там вы видите таблицу, показывающую несколько атрибутов на запрос.Если он отсутствует, добавьте столбец Protocol , в котором указывается, используется ли HTTP / 1, h2c или любой другой протокол для каждого запроса.Chrome также предоставляет информацию о протоколе аналогичным образом:

Просто щелкните правой кнопкой мыши столбец в разделе инструментов разработчика Netowrk и вы получите обзор всех доступных столбцов:

enter image description here

Другой альтернативой отладочному протоколу, используемому клиентами, является логирование доступа .Просто создайте context.xhtml в веб-приложении ROOT по умолчанию в \apache-tomcat\webapps\ROOT\META-INF\ с таким содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Valve className="org.apache.catalina.valves.AccessLogValve"/>
</Context>

После перезапуска Tomcat и выполнения некоторых запросов вы найдете \apache-tomcat\logs\localhost_access_log.2019-03-12.txt, в котором точно указан протоколиспользуется для каждого запроса:

... - - [12/Mar/2019...] "GET / HTTP/1.1" 200 11488
... - - [12/Mar/2019...] "GET / HTTP/1.1" 200 11488
... - - [12/Mar/2019...] "GET / HTTP/2.0" 200 11468

В моем случае оба первых запроса были выполнены с использованием Chrome и Firefox, третий запрос был выполнен с помощью команды curl -v --http2 localhost:8080, которую вы написали в своем другом ответе.

...