启用http3
模块,执行如下命令:
java -jar $JETTY_HOME/start.jar --add-modules=http3
命令的输出,如下:
ALERT: There are enabled module(s) with licenses.
The following 2 module(s):+ contains software not provided by the Eclipse Foundation!+ contains software not covered by the Eclipse Public License!+ has not been audited for compliance with its licenseModule: jna+ Java Native Access (JNA) is licensed under the LGPL, version 2.1+ or later, or (from version 4.0 onward) the Apache License,+ version 2.0.+ You can freely decide which license you want to apply to the project.+ You may obtain a copy of the LGPL License at:+ http://www.gnu.org/licenses/licenses.html+ A copy is also included in the downloadable source code package+ containing JNA, in file "LGPL2.1", under the same directory+ as this file.+ You may obtain a copy of the Apache License at:+ http://www.apache.org/licenses/+ A copy is also included in the downloadable source code package+ containing JNA, in file "AL2.0", under the same directory+ as this file.Module: quiche+ Redistribution and use in source and binary forms, with or without+ modification, are permitted provided that the following conditions are met:+ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.+ * Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.Proceed (y/N)? y
INFO : alpn-java transitively enabled
INFO : alpn transitively enabled, ini template available with --add-modules=alpn
INFO : work transitively enabled
INFO : http2 transitively enabled, ini template available with --add-modules=http2
INFO : http3 initialized in ${jetty.base}/start.d/http3.ini
INFO : jna transitively enabled
INFO : ssl transitively enabled, ini template available with --add-modules=ssl
INFO : quiche transitively enabled
INFO : mkdir ${jetty.base}/work
INFO : mkdir ${jetty.base}/lib/http3
INFO : download https://repo1.maven.org/maven2/net/java/dev/jna/jna-jpms/5.14.0/jna-jpms-5.14.0.jar to ${jetty.base}/lib/http3/jna-jpms-5.14.0.jar
INFO : download https://repo1.maven.org/maven2/org/mortbay/jetty/quiche/jetty-quiche-native/0.20.0/jetty-quiche-native-0.20.0.jar to ${jetty.base}/lib/http3/jetty-quiche-native-0.20.0.jar
INFO : Base directory was modified
http3
模块的配置文件$JETTY_BASE/start.d/http3.ini
,内容如下:
# ---------------------------------------
# Module: http3
# Enables experimental support for the HTTP/3 protocol.
# ---------------------------------------
--modules=http3## The host/address to bind the connector to.
# jetty.quic.host=0.0.0.0## The port the connector listens on.
# jetty.quic.port=8444## The connector idle timeout, in milliseconds.
# jetty.quic.idleTimeout=30000## Specifies the maximum number of concurrent requests per session.
# jetty.quic.maxBidirectionalRemoteStreams=128## Specifies the session receive window (client to server) in bytes.
# jetty.quic.sessionRecvWindow=4194304## Specifies the stream receive window (client to server) in bytes.
# jetty.quic.bidirectionalStreamRecvWindow=2097152## Specifies the stream idle timeout, in milliseconds.
# jetty.http3.streamIdleTimeout=30000
各参数的说明,如下:
jetty.quic.host
监听服务的主机地址,默认值为0.0.0.0
,即在本机所有的IP地址上监听链接的请求。jetty.quic.idleTimeout
链接的空闲时长,单位:毫秒,默认值为30000
,即30
秒。jetty.quic.maxBidirectionalRemoteStreams
单个会话中允许并行发起的请求的数量。默认值为128
。jetty.quic.sessionRecvWindow
会话的接收数据的窗口,单位:字节。默认值为4194304
。jetty.quic.bidirectionalStreamRecvWindow
双向传输时接收数据的窗口,缓冲区的大小,单位:字节。默认值为2097152
。jetty.http3.streamIdleTimeout
单位:毫秒,默认值为30000
,即30
秒。
参考资料
- HTTP/3核心概念之QUIC
- Quic协议(一)------HTTP3基础之QUIC协议介绍
- 5 分钟看懂 HTTP3
- RFC 9000 QUIC: A UDP-Based Multiplexed and Secure Transport
- QUIC 开源实现列表
- QUIC-HTTP/3介绍
- HTTP 3.0之QUIC优势和TCP弊端
- [技术更新]Http/3 QUIC 基础
- 概念回顾:QUIC 和 HTTP/3