HTTP/3 支持
🌐 HTTP/3 support
当协商的 ALPN 标识符为 'h3'(或某个 'h3-*' 草案变体之一)时,QUIC 会话会运行由 nghttp3 支持的 HTTP/3 应用。'h3' 是 quic.connect() 和 quic.listen() 的默认 ALPN,因此除非你明确选择不同的 ALPN,否则你得到的就是 HTTP/3。
🌐 When the negotiated ALPN identifier is 'h3' (or one of the 'h3-*'
draft variants), the QUIC session runs the HTTP/3 application backed
by nghttp3. 'h3' is the default ALPN for quic.connect() and
quic.listen(), so HTTP/3 is what you get unless you select a
different ALPN explicitly.
选择 HTTP/3 应用可以启用许多非 HTTP/3 应用无法使用的流级和会话级功能:
🌐 Selecting the HTTP/3 application enables a number of stream- and session-level capabilities that are not available to non-HTTP/3 applications:
- 头部和尾部 — 请求和响应头块(包括伪头如
:method、:path、:scheme、:authority和:status)、尾部头部以及信息性(1xx)响应。参见stream.sendHeaders()、stream.sendTrailers()和stream.sendInformationalHeaders()。 - 流优先级 (RFC 9218) — 每个流的紧急性和增量标志。见
stream.priority和stream.setPriority()。 - HTTP/3 数据报 (RFC 9297) — 不可靠的应用层数据报。对等方必须通告
SETTINGS_H3_DATAGRAM=1,可以通过在两端对等方将application.enableDatagrams设置为true来启用。参见session.sendDatagram()和session.ondatagram。 - ORIGIN 帧 (RFC 9412) — 服务器会自动在其
sessionOptions.sni映射中广播主机名(带有authoritative: true的条目);客户端通过session.onorigin接收该列表。 - GOAWAY — 优雅关闭。服务器在
session.close()过程中发出GOAWAY;客户端通过session.ongoaway观察到它,并停止打开新的双向流。 - 扩展 CONNECT 设置 (RFC 9220) — 可以通过
application.enableConnectProtocol启用SETTINGS_ENABLE_CONNECT_PROTOCOL设置。该设置会被交换,但应用负责处理:protocol伪头部以及任何额外的负载封装。 - QPACK 调优 — 通过
application.qpackMaxDTableCapacity及其相关方式设置动态表大小和阻塞流限制。