HTTP3 走 UDP,HTTP2 仍走 TCP 兜底
HTTP/3 把 QUIC 跑在 UDP:443 上,值得在意的理由是丢一个包的代价。TCP 连接上所有流共用一个字节流,丢一个段就会挡住它后面所有数据的交付,直到重传到达。QUIC 让每条流各自拥有丢失恢复,同一个丢包只挡住数据真的在那个包里的流。 别扭的地方在于这不是一个开关。客户端必须先知道服务器会说 HTTP/3 才可能去试,而它得知这件事所走的那条路径,恰恰是你想优化的那条。 两种传输,一个端口号 UDP:443 和 TCP:443 属于彼此独立的命名空间,所以一个监听可以同时占住两者。这就是为什么 nginx 的 server 块可以把 listen 443 quic reuseport; 和 listen 443 ssl; http2 on; 并排放着,用同一个端口号同时服务 QUIC 和 HTTP/2。reuseport 比看起来更重要:没有它,第二次绑定 UDP:443 会拿到 EADDRINUSE,而这正是两个 server 块都声称要占用 QUIC 监听时看到的报错。 ...