Шифрование де-факто обязательное для использования http / 2:
Хотя сам по себе стандарт не требует использования шифрования, все основные реализации клиента (Firefox, Chrome, Safari, Opera, IE, Edge) заявили, что они будут поддерживать только HTTP / 2 по TLS ...
Так что для запуска вам потребуется полностью настроенный SSLHostConfig
с Certificate
HTTP / 2 по TLS.
Может пригодиться такой разъем:
<Connector SSLEnabled="true" maxThreads="150" port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true"
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation">
<SSLHostConfig certificateVerification="none"
sslProtocol="TLS">
<Certificate certificateKeyAlias="myKeyAlias"
certificateKeystoreFile="/path/to/my/keystore.jks"
certificateKeystorePassword="myPassword"
certificateKeystoreType="JKS">
</Certificate>
</SSLHostConfig>
<UpgradeProtocol
className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
Если вы хотите использовать NIO2, измените protocol
на org.apache.coyote.http11.Http11Nio2Protocol
.
Если вы хотите использовать SSL без OpenSSL, но вместо этого использовать JSSE реализации java, измените sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
(если предоставляется вашей JRE).
Несмотря на то, что браузеры не будут обновляться до http/ 2 для незашифрованных соединений, технически возможно настроить http / 2-коннектор на Apache Tomcat без SSL и использовать его, например, с CURL - принудительное принудительное обновление http / 2:
<Connector SSLEnabled="false" maxThreads="150" port="8444" protocol="org.apache.coyote.http11.Http11NioProtocol" secure="false">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
</Connector>
Вывод отладочной информации CURL:
$ curl http://localhost:8444 -v --http2
...
* Connected to localhost (::1) port 8444 (#0)
> GET / HTTP/1.1
> Host: localhost:8444
> User-Agent: curl/7.60.0
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
>
< HTTP/1.1 101
< Connection: Upgrade
< Upgrade: h2c
< Date: Mon, 28 Oct 2019 12:06:18 GMT
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Connection state changed (MAX_CONCURRENT_STREAMS == 200)!
< HTTP/2 200
< content-type: text/html;charset=UTF-8
< date: Mon, 28 Oct 2019 12:06:18 GMT
<