客户端分别分支到 QUIC 与 UDP 上的 h3 或 TCP 上的 h2;路径不要求先建立 h2 连接。

HTTP3 走 UDP,HTTP2 仍走 TCP 兜底

HTTP/3 运行在 QUIC 与 UDP 之上,常用端口是 443,但协议不要求只能使用这个端口。HTTP/2 各流共用 TCP 的有序字节流,缺失片段可能阻塞无关请求的数据交付。QUIC 按流提供有序交付,某条流丢失数据不必阻塞另一条流;连接级拥塞控制与 HTTP 层依赖仍可能影响多个流,不能说每条流都有完全独立的拥塞控制或丢包恢复状态。 仅启用服务器模块还不够。客户端需要 HTTP/3 支持、可代表该源的端点、可验证的 TLS 身份,以及实际可用的 UDP 路径。发现机制和回退策略决定何时尝试它;不能把此前必须成功访问一次 TCP 服务当成所有客户端都要满足的协议前提。 两种传输,一个端口号 UDP:443 与 TCP:443 使用不同套接字,只是端口数字相同;并不是一个套接字同时监听两种传输。nginx 的 server 块可以并列配置 listen 443 quic reuseport; 与 listen 443 ssl; http2 on;。受支持系统上的 reuseport 用于每个 worker 的监听套接字,不是修复重复 server 声明或其他进程占用端口的万能选项。应先核对完整配置、实际错误与套接字归属,再判断是否需要修改。 ...

二月 12, 2028 · 3 分钟 · XB Field Notes
同一 TCP 连接中包含三条 HTTP/2 流:A 被取消,B 完整读取正文,后续 C 复用原连接。共享 TCP 约束仍然限制进度。

HTTP/2 多路复用消除排队

HTTP/2 通过多路复用解除 HTTP 响应的顺序约束,但不同流仍然共享 TCP 连接及其故障边界。取消就是一个值得单独验证的场景:终止某个请求,不一定需要破坏相邻请求或可复用连接。这是一项有明确作用范围的能力,不能扩写成所有流在任何条件下都互不影响。 取消一条 HTTP/2 请求后,应分别核验相邻正文与原连接复用。共享 TCP 约束依然存在;取消也不能撤销已经发生的业务操作。此图不增加运行证据。 流不是底层套接字 HTTP/2 在连接内部标识单条流。RFC 9113 定义的 RST_STREAM 用于终止某条流,既可以表达取消,也可以报告流错误;它并不是重置整个套接字的 TCP reset。只要连接本身仍然可用,实现就可以停止一次交换,同时让其他流继续推进,而不必为每次取消重新建立连接。 ...

一月 16, 2027 · 3 分钟 · XB Field Notes