CalcGuide · 技术博客主页 / 一页纸学习计划
🔥极高

HTTP/1.1 到 HTTP/3:从请求到流复用

分类:计算机基础 · 路径:docs/topics/http-1-2-3/README.md

#http#http2#http3#quic#rest

理解 HTTP 方法/状态码/Header 演进、HTTP/2 二进制帧与多路复用、HTTP/3+QUIC,能用 curl/nghttp2 调试

父主题

计算机网络:从物理层到 HTTP/3 的全栈协议与排查

子主题(0)

HTTP/1.1 到 HTTP/3:从请求到流复用

0. 元信息

1. 学习路线

HTTP 起源与请求/响应模型
  → HTTP/1.0 短连接与 keep-alive
  → HTTP/1.1 持久连接、分块传输、Host 头
  → 方法、状态码、Header 的语义
  → TLS 1.2/1.3 与 ALPN:HTTPS 握手
  → HTTP/2 二进制分帧、HPACK、流量/优先级
  → HTTP/2 多路复用与单连接并发
  → HTTP/3 + QUIC:UDP 之上的可靠流
  → QPACK 与 0-RTT
  → 实战:curl/nghttp2/wireshark 调试三协议

每一步配一组抓包;HTTP 文本协议要看到 raw 字节,HTTP/2 要看到帧,HTTP/3 要看到 CRYPTO 帧。

2. 阶段周数分配

阶段4 周方案5 周方案备注
1. HTTP 语义与 1.0/1.10.75 周1 周必读 RFC 9110 关键章节
2. 方法、状态码、Header0.75 周1 周REST 风格映射
3. TLS + HTTPS 握手0.5 周0.75 周ALPN 协商
4. HTTP/2 分帧与 HPACK0.75 周1 周nghttp2 调试
5. HTTP/2 多路复用0.5 周0.5 周单连接并发
6. QUIC 与 HTTP/30.5 周0.5 周curl --http3-only
7. 综合调试0.25 周0.25 周三协议对比

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. HTTP 起源Berners-Lee 1989 起源、CERN/MIT 文档、HTTP/0.9 → 1.0一段 HTTP/0.9 请求/响应原始字节能从 ASCII 字节读出请求方法、路径、版本
2. HTTP/1.0 vs 1.1短连接、keep-alive、Host、Chunked、pipeliningcurl -v http://... 看 1.0 与 1.1 区别能解释 1.1 为什么强制要求 Host 头
3. 方法 / 状态码 / HeaderGET/POST/PUT/DELETE/HEAD/PATCH/OPTIONS、2xx/3xx/4xx/5xx、Cache-Control、Authorization、Content-Type用 6 种方法请求同一资源,记录状态码与 Header能解释 401 vs 403、304 vs 200 from cache、409 适用场景
4. REST 与幂等资源建模、URI 设计、幂等方法(GET/PUT/DELETE vs POST/PATCH)设计一个 5 资源的 REST API能解释 POST 与 PUT 的幂等差异
5. TLS 与 HTTPSTLS 1.2/1.3 握手、ALPN、X.509、SNI、OCSP staplingopenssl s_client -alpn h2 -connect example.com:443能从抓包看出 ALPN 选了哪个协议
6. HTTP/2 协议二进制分帧、HEADERS/DATA/WINDOW_UPDATE/PING/PUSH、HPACKnghttp2 -v https://example.com 看帧能画出 9 字节帧头(length/type/flags/stream_id)
7. HTTP/2 多路复用单连接并发流、流量控制、优先级、server pushcurl --http2 -v 看 stream id能解释为什么 HTTP/2 解决了应用层队头阻塞但没解决 TCP 层
8. QUIC 与 HTTP/3QUIC 头格式、CRYPTO 帧、流帧、连接迁移、0-RTT、QPACKcurl --http3-only -v https://cloudflare.com能说出 QUIC 相对 TCP+TLS 的三大改进
9. 综合调试三协议对比、wireshark 解密、SSLKEYLOGFILE一份三协议对比报告能在 15 分钟内从抓包判断请求走的是哪一版

4. 第一周任务

任务当天交付
Day 1curl -v http://example.com 看请求行/响应行/Header;telnet 手工敲一个 GET请求/响应原始字节标注
Day 2curl -v --http1.0 对比 HTTP/1.0 与 1.1 的连接行为差异一份差异记录
Day 3openssl s_client -connect example.com:443 -alpn h2,http/1.1 看 ALPN 协商结果ALPN 输出 + 截图
Day 4curl -v --http2 https://nghttp2.org 看 HTTP/2 协商;nghttp2 -v https://nghttp2.org 看帧细节nghttp2 帧日志
Day 5curl --http3-only -v https://cloudflare.com 触发 HTTP/3;抓包看 CRYPTO 帧HTTP/3 抓包 + 帧说明
Day 6wireshark + SSLKEYLOGFILE 解密 TLS;对照三协议抓包三份解密 pcap
Day 7项目:用 curl + nghttp2 把同一资源用三种协议都请求一遍,记录握手 RTT、首字节、复用一个连接并发 100 个请求的总耗时一份三协议对比表

Day 7 拆解

步骤 A —— 最小可用(60 分钟)

  1. 选三个支持 HTTP/3 的目标,例如 https://cloudflare.comhttps://www.google.comhttps://nghttp2.org
  2. curl -w '%{time_connect} %{time_starttransfer}\n' -o /dev/null -s https://host/ 跑三协议;
  3. for i in $(seq 1 100); do curl -s -o /dev/null https://host/ & done; wait 测并发;
  4. 记到 notes/week1-day7.md

步骤 B —— 补齐边界(30 分钟)

进阶:稳定通过后,用 tc qdisc add dev eth0 root netem 100ms loss 1% 模拟高延迟高丢包,重复三协议对比,看 HTTP/3 在丢包下的优势。

5. 阶段通用验收

  1. 不看 RFC 也能默写 HTTP/1.1 请求行 + 9 个常用状态码 + 5 个常用 Header;
  2. 用自己的话解释「HTTP/1.1 的队头阻塞」「HTTP/2 怎么缓解」「HTTP/3 为什么换 UDP」;
  3. 画一张图:HTTP/2 帧头 9 字节布局、HPACK 静态表、HTTP/3 CRYPTO 帧结构;
  4. 测试异常:5xx 服务端错、4xx 客户端错、3xx 重定向循环、TLS 握手中断、HTTP/2 GOAWAY;
  5. 准备 3 组自定义场景并贴抓包(HTTP/1.1 长连接、HTTP/2 多流并发、HTTP/3 0-RTT);
  6. 记录每个抓包的 BPF 过滤器、ALPN、stream id;
  7. 能修改 nginx 配置切换 HTTP/2 / HTTP/3,并验证切换。

6. 最终验收

7. 综合项目

首选:HTTP 三协议对比实验台(必做:本地 nginx 同时支持 h2 + h3,配合 openssl 自签证书;用 curl --http1.1/--http2/--http3-only 测首字节、握手 RTT、并发吞吐)。

备选

综合项目必做要求:

  1. 场景描述:实验目标、对比维度、链路情况;
  2. 工具选择理由:为什么用 nghttp2 而不是 curl?为什么用 openssl 自签证书而不是 Let’s Encrypt?
  3. 核心分析:每个协议的握手 RTT、首字节、并发吞吐对比;
  4. 复现脚本:可重复运行的 nginx 配置 + curl/nghttp2 命令;
  5. 边界测试:换网络条件(loss/RTT)下的对比;
  6. 运行说明:环境依赖(nginx ≥ 1.25、nghttp2curl ≥ 7.88、quictlsboringssl)、复现步骤;
  7. README:项目介绍、目录结构、复盘;
  8. 复盘记录:用时、难点、收获、下一步。

复盘项目交付物统一存到 notes/

本主题贡献

本主题沉淀 HTTP/1.1 文本协议(含 HTTP 缓存协商)、HTTP/2 二进制分帧 + HPACK、HTTP/3 over QUIC + QPACK 三代演进,所有结论用 curl --http1.1/--http2/--http3-only + nghttp2 -v + Wireshark(配 SSLKEYLOGFILE)三角验证。

职责(3 项)

  1. 解读 HTTP/1.1 请求/响应行、9 个常用状态码、Cache-Control/ETag/Last-Modified HTTP 缓存协商,能区分 200 from cache 与 304 Not Modified,能解释 VaryIf-None-Match 双保险策略;
  2. 抓 HTTP/2 9 字节帧头(length/type/flags/stream_id)、HPACK 静态表 61 项与动态表,能解释多路复用为什么解决应用层队头阻塞但没解决 TCP 层队头阻塞;
  3. 抓 HTTP/3 Long Header(Initial/Handshake/0-RTT)、CRYPTO 帧、QPACK encoder/decoder stream,能解释为什么 HTTP/3 抗丢包、为什么 0-RTT 只能用于幂等请求、为什么 connection_id 支持连接迁移(换 IP 不重连)。

交付物(4 项)

  1. 同一资源 HTTP/1.1 + HTTP/2 + HTTP/3 三协议对比表(curl -w '%{time_connect} %{time_starttransfer}' + 100 并发总耗时);
  2. nghttp2 -v https://nghttp2.org HTTP/2 帧日志(SETTINGS/HEADERS/DATA/WINDOW_UPDATE/PING/GOAWAY),含 stream_id 与 END_STREAM 标注;
  3. curl --http3-only -v https://cloudflare.com 抓包 + SSLKEYLOGFILE + Wireshark QUIC 解密后的 CRYPTO 帧明文;
  4. HTTP 缓存实验矩阵(Cache-Control: max-age=NETagLast-ModifiedVary)对同一资源的响应差异记录。

指标(3 项)

  1. HTTP/2 stream 复用率 ≥ 80%(100 并发请求平均每连接 stream 数);
  2. HTTP 缓存命中率 ≥ 60%(CDN/源站口径,Age 头统计);
  3. 三协议首字节 TTFB 比:HTTP/1.1 > HTTP/2 > HTTP/3(同 CDN、同 RTT 链路,高丢包下 HTTP/3 反超更明显)。

8. 推荐开源资料(按角色分工)

角色资料链接用法
RFC 原文RFC 9110 — HTTP Semanticshttps://www.rfc-editor.org/rfc/rfc9110HTTP 通用语义总览
RFC 原文RFC 9112 — HTTP/1.1https://www.rfc-editor.org/rfc/rfc9112HTTP/1.1 现行规范
RFC 原文RFC 7540 / RFC 9113 — HTTP/2https://www.rfc-editor.org/rfc/rfc9113HTTP/2 现行规范
RFC 原文RFC 9114 — HTTP/3https://www.rfc-editor.org/rfc/rfc9114HTTP/3 映射层
RFC 原文RFC 9000 — QUIC 传输https://www.rfc-editor.org/rfc/rfc9000QUIC 协议(与 tcp-and-udp 重复,建议在两处都列)
RFC 原文RFC 8446 — TLS 1.3https://www.rfc-editor.org/rfc/rfc8446TLS 1.3 握手
RFC 原文RFC 7541 — HPACKhttps://www.rfc-editor.org/rfc/rfc7541HTTP/2 头压缩
RFC 原文RFC 9204 — QPACKhttps://www.rfc-editor.org/rfc/rfc9204HTTP/3 头压缩
工具手册nghttp2 官方文档https://nghttp2.org/documentation/HTTP/2 client 与 server 实现
工具手册curl HTTP/3 文档https://curl.se/docs/http3.htmlcurl 的 HTTP/3 支持
工具手册nginx HTTP/3 配置https://nginx.org/en/docs/http/ngx_http_v3_module.htmlnginx 启用 h3
工具手册man curlman curl协议切换选项 --http1.1/--http2/--http3
中文讲解字节跳动技术博客「HTTP/3 实践」https://web.archive.org/web/2024*/blog.csdn.net/ByteDanceTech工程视角
抓包练习Cloudflare HTTP/3 测试页https://cloudflare-quic.com/在线验证 HTTP/3
抓包练习Wireshark QUIC 解密指南https://wiki.wireshark.org/QUIC解密 HTTP/3 抓包

许可证提示:nginx 是 BSD-2-Clause;nghttp2 是 MIT;curl 是 MIT/X;Wireshark 是 GPL-2.0。复制或参考命令前先确认许可证。

源码阅读时机:HTTP/2 实现源码(nghttp2/lib/*.c)放到「阶段 6(HTTP/2 多路复用)」之后再读;RFC 原文从 Day 1 就开始对照,但不要试图一次通读——按当前阶段挑相关章节。

9. 学习资料汇聚(v0.3 自包含)

本节内容基于公开 RFC、nghttp2/curl 文档与个人整理,标注「由本计划生成」处为计划自写。本节是子主题自包含的最后一节,不再依赖 notes/ 子目录。

9.1 背景与动机

9.2 概念地图

flowchart LR
  App[应用层] --> HttpSemantics[HTTP 语义]
  HttpSemantics --> H11[HTTP/1.1 文本]
  HttpSemantics --> H2[HTTP/2 二进制]
  HttpSemantics --> H3[HTTP/3]
  H11 --> TLS[TLS 1.2/1.3]
  H2 --> TLS
  H3 --> QUIC[QUIC]
  TLS --> TCP
  QUIC --> UDP
  H2 --> Frame[9 字节帧头]
  H2 --> HPACK[HPACK]
  H3 --> Stream[QUIC Stream]
  H3 --> QPACK[QPACK]
  H2 --> Mux[单连接多流]
  H3 --> Mux2[无队头阻塞]
  H2 --> Pri[流优先级]
  H3 --> Migration[连接迁移]

关系说明:

9.3 基础知识讲解

经典论文 / 经典书籍 / 优秀博客 / 核心人物 / 开发方法 五大类,每类 ≥3 条。

经典论文 / RFC(必读)

资料角色评分链接
RFC 9110 — HTTP SemanticsHTTP 语义总览5https://www.rfc-editor.org/rfc/rfc9110
RFC 9112 — HTTP/1.1HTTP/1.1 现行规范5https://www.rfc-editor.org/rfc/rfc9112
RFC 9113 — HTTP/2HTTP/2 现行规范5https://www.rfc-editor.org/rfc/rfc9113
RFC 7541 — HPACKHTTP/2 头压缩4https://www.rfc-editor.org/rfc/rfc7541
RFC 9114 — HTTP/3HTTP/3 映射层5https://www.rfc-editor.org/rfc/rfc9114
RFC 9000 — QUICQUIC 传输5https://www.rfc-editor.org/rfc/rfc9000
RFC 9204 — QPACKHTTP/3 头压缩4https://www.rfc-editor.org/rfc/rfc9204
RFC 8446 — TLS 1.3TLS 1.3 握手5https://www.rfc-editor.org/rfc/rfc8446
SPDY 白皮书HTTP/2 起源4https://www.chromium.org/spdy/spdy-whitepaper/

经典书籍(系统化)

资料角色评分链接
《HTTP/2 in Action》(Barry Pollard)HTTP/2 工程实战5https://www.manning.com/books/http2-in-action
《HTTP/3 Explained》(Daniel Stenberg,curl 作者)HTTP/3 在线书5https://http3-explained.haxx.se/
《High Performance Browser Networking》(Ilya Grigorik)浏览器视角的网络协议5https://hpbn.co/
《Web Performance in Action》(Jeremy Wagner)性能调优4https://www.manning.com/books/web-performance-in-action
《Real World HTTP》(涩川喜规)实战经验 + 日本视角4https://www.oreilly.co.jp/

优秀博客(按问题查)

资料角色评分链接
Cloudflare Blog「HTTP/3: the past, the present, and the future」HTTP/3 工程解析5https://blog.cloudflare.com/http-3-the-past-present-and-future/
Cloudflare Blog「An overview of HTTP/3」HTTP/3 抓包分析5https://blog.cloudflare.com/http-3-the-past-present-and-future/
Fastly Blog「HTTP/2 实务」CDN 视角 HTTP/2 调优4https://blog.cloudflare.com/
Robin Marx(HTTP/3 抓包权威)HPACK/QPACK 深入5https://github.com/rmarx
Daniel Stenberg(curl 作者)博文HTTP/3 与 curl 演进4https://daniel.haxx.se/blog/
Mozilla MDN HTTP 文档协议查阅4https://developer.mozilla.org/en-US/docs/Web/HTTP
美团技术团队「HTTP/2 实践」中文工程经验4https://tech.meituan.com/
字节跳动技术博客中文 HTTP/3 实践3https://web.archive.org/web/2024*/blog.csdn.net/ByteDanceTech

核心人物(知道谁定的规范)

人物贡献关键出处
Tim Berners-LeeHTTP/HTML/URL 设计1989 备忘录
Roy FieldingREST 架构风格(论文影响 HTTP 方法设计)2000 博士论文
Henrik Frystyk NielsenHTTP/1.0/1.1 编辑RFC 1945/2068
Mike BelsheSPDY 协议主设计者Google SPDY 白皮书
Roberto PeonHTTP/2 协议推动Google
Martin ThomsonIETF QUIC WG 主席、RFC 9114/9000 编辑IETF
Jana IyengarQUIC 设计核心IETF QUIC WG
Ryan HamiltonHTTP/2 设计Google
Robin MarxHTTP/3 抓包/HPACK 教学独立研究者
Daniel Stenbergcurl 作者、HTTP/3 布道者haxx.se

开发方法(动手习惯)

方法适用关键点
curl -v 必开所有 HTTP 调试看握手、TLS、ALPN、HTTP 版本、Header
curl --http2-only / --http3-only强制单协议关掉降级,看真实协商
nghttp2 -vHTTP/2 帧细节比 curl 多出 SETTINGS/WINDOW_UPDATE/PRIORITY
openssl s_client -alpnTLS + ALPN看服务端协商出 h2 还是 http/1.1
SSLKEYLOGFILE + wireshark解密 TLS客户端设环境变量,wireshark 配置密钥日志路径
curl -w '%{time_connect} %{time_starttransfer}'测握手与首字节-w 模板化输出时间字段
--parallel 并发请求验证多路复用curl 8.0+ 支持并发多 URL
wireshark 解 QUICHTTP/3 抓包SSLKEYLOGFILE 后才能看 CRYPTO 帧明文
tcpdump -nn -S 'tcp port 443'抓包不加 -S 序列号是相对值

缺失部分:nghttp2--priorities 选项语义、curl--happy-eyeballs-timeout-ms 取值。本计划不重写工具手册;查 man curl / nghttp2 --help 即可。

9.4 经典问题与经典案例

#问题为什么会重要最简答案
1HTTP/1.1 队头阻塞同一连接上后一个请求等前一个响应pipelining 不实用;浏览器并行开 6 条连接
2HTTP/2 应用层解决但 TCP 层没解决一条 TCP 丢包阻塞所有 HTTP/2 流HTTP/3 换 UDP + QUIC 流解决
3HPACK 静态表与动态表头压缩核心静态表 61 项;动态表编码常用 Header
4QPACK 为什么不能直接复用 HPACKHPACK 假设 TCP 有序,QUIC 流独立QPACK 用单向编码器 + 解码器指令
50-RTT 重放风险0-RTT 数据可被攻击者重放0-RTT 只能用于幂等请求;服务端要绑定 client_random
6连接迁移(Connection Migration)TCP 4 元组变就断连QUIC 用 connection_id,不依赖 4 元组
7ALPN 协商失败服务端不支持 h2 但客户端默认走 h2openssl s_client -alpn h2,http/1.1 验证
8HTTP/2 GOAWAY 帧服务端主动关闭,最后 stream id 通知客户端收到 GOAWAY 后只发 ≤ 该 id 的请求
9HTTP/2 优先级争议浏览器实现的优先级复杂、收益不稳RFC 9218(优先级)已标准化,但实现仍不一致
10QUIC 抓包解不出 CRYPTO 帧TLS 1.3 加密SSLKEYLOGFILE 喂 wireshark
11curl 默认走 HTTP/2 还是 1.1--http2 是尝试,--http2-only 是强制后者失败直接报错而不是降级
12HTTP/3 公网部署比例CDN 部署了 h3 但小站未必https://cloudflare-quic.com/ 看自己网络支持情况
13中间设备破坏 HTTP/2某些老旧代理只认 HTTP/1.1协商失败会自动降级,但性能打折
14PATCH 与 PUT 的幂等差异RFC 9110 明确区分PUT 替换整资源(幂等),PATCH 局部更新(非幂等除非自定)
15304 Not Modified 的强校验ETag / Last-Modified 不一致直接 200If-None-Match + If-Modified-Since 双保险

9.5 学习难点

概念难点

难点为什么会卡突破路径
HTTP 语义 vs 协议层方法/状态码是协议无关RFC 9110 是「语义」,9112/9113/9114 是「协议」
帧、流、连接三者关系HTTP/2 一连接多流,每流多帧画一棵树:Connection → Streams → Frames
HPACK 索引 vs 字面量两类编码抓包看到 :authority: example.com(1) 索引
QPACK 单向编码编码器只发指令不阻塞看 RFC 9204 的 encoder/decoder stream 图
ALPN vs NPN两代 TLS 扩展名ALPN 是 TLS 1.2 后期引入,TLS 1.3 强制
0-RTT vs 1-RTT0-RTT 用上次 PSK抓包看第一个 ClientHello 后是否有 Early Data
connection_id 与 4 元组QUIC 抗迁移核心抓包看 Initial 包 connection_id 字段
HTTP/3 与 QUIC 关系QUIC 是传输,HTTP/3 是应用类比 TCP vs HTTP/1.1 的关系

思维难点

难点为什么会卡突破路径
三层「队头阻塞」应用层、传输层、加密层都会阻塞HTTP/2 解决应用层,QUIC 解决传输层
文本 → 二进制 → 流抽象层跃迁先看 raw 字节,再看 9 字节帧头,最后看 stream 帧
优先级到底要不要实现复杂、收益不一读 RFC 9218,浏览器实现优先级树
HPACK 动态表 size 设置太小压缩率低,太大吃内存nginx 默认 4 KB;按实际头调整

工程难点

难点为什么会卡突破路径
curl 默认走什么协议不指定就自动协商--http2-only--http3-only 排除歧义
wireshark 解不出 HTTP/2没设 SSLKEYLOGFILE客户端 export 该变量;wireshark 配置密钥日志
nghttp2 抓不到 SETTINGS默认输出不够详细-v--verbose
QUIC 在公司网被屏蔽UDP 443 阻断换 CDN 测;联系 IT 开放 UDP 443
nginx 启 HTTP/3 需要 quictlsnginx 默认 OpenSSL 不支持编译时用 quictlsboringssl
自签证书客户端拒绝curl 默认严格 TLS-k--insecure 临时绕过
nghttp2 服务的 HTTP/2 抓包是乱码加密配合 SSLKEYLOGFILE

9.6 技术标准与接口

9.6.1 Entity

名称版本发布组织状态许可证 / 可访问性
HTTP Semantics (RFC 9110)2022IETF / HTTPBIS现行标准免费公开
HTTP/1.1 (RFC 9112)2022IETF / HTTPBIS现行标准免费公开
HTTP/2 (RFC 9113)2022IETF / HTTPBIS现行标准免费公开
HTTP/3 (RFC 9114)2022IETF / QUIC WG现行标准免费公开
HPACK (RFC 7541)2015IETF / HTTPBIS现行标准免费公开
QPACK (RFC 9204)2022IETF / QUIC WG现行标准免费公开
QUIC (RFC 9000)2021IETF / QUIC WG现行标准免费公开
TLS 1.3 (RFC 8446)2018IETF / TLS WG现行标准免费公开
curl持续更新haxx.se / curl 项目工具MIT
nghttp2持续更新tatsuhiro-t / nghttp2 项目工具 + 库MIT
nginx (含 http_v3_module)≥ 1.25F5 / nginx 项目服务器BSD-2-Clause

9.6.2 Scope

不适用:实时双向通信(用 WebSocket、gRPC streaming、QUIC datagrams)、点对点文件传输(用 BitTorrent、WebRTC DataChannel)。

9.6.3 Structure

HTTP 请求/响应(HTTP/1.1 文本):

GET /index.html HTTP/1.1\r\n
Host: example.com\r\n
User-Agent: curl/8.0\r\n
Accept: */*\r\n
\r\n

HTTP 响应:

HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
Content-Length: 1234\r\n
\r\n
<body>

HTTP/2 帧头(9 字节):

偏移字段长度说明
0-2Length3 字节帧负载长度(不含帧头)
3Type1 字节DATA=0x0 / HEADERS=0x1 / PRIORITY=0x2 / RST_STREAM=0x3 / SETTINGS=0x4 / PUSH_PROMISE=0x5 / PING=0x6 / GOAWAY=0x7 / WINDOW_UPDATE=0x8 / CONTINUATION=0x9
4Flags1 字节END_STREAM(0x1) / END_HEADERS(0x4) / PADDED(0x8) / PRIORITY(0x20)
5-8Stream Identifier4 字节31 位 stream id;最高位保留

QUIC Long Header(Initial / Handshake / 0-RTT):

偏移字段长度说明
0Header Form1 位1 = Long Header
1-2Fixed Bit + Type2 位 + 4 位Initial=0, Handshake=2, 0-RTT=1
3-7Type-Specific5 位包号低 5 位等
8-11Version4 字节0x00000001 = QUIC v1
12-15DCID Len1 字节 + DCID目标连接 ID
16+SCID Len1 字节 + SCID源连接 ID
变长Token / Packet Number / Payload变长含 CRYPTO 帧

常用方法与状态码:

方法幂等状态码含义
GET200 / 304 / 404资源 / 缓存命中 / 未找到
POST201 / 400 / 422创建 / 客户端错 / 字段校验失败
PUT200 / 204 / 409替换成功 / 无内容 / 冲突
DELETE200 / 204 / 404删除 / 无内容 / 未找到
PATCH否(除非自定)200 / 409部分更新 / 冲突
HEAD同 GET 但无 body元数据
状态码含义典型场景
1xx信息100 Continue
200OK成功
204No ContentDELETE/PUT 无 body
301 / 308永久重定向永久迁移
302 / 307临时重定向表单 POST 后跳转
304Not Modified缓存命中
400Bad Request请求语法错
401Unauthorized未认证
403Forbidden认证但无权限
404Not Found资源不存在
409Conflict资源冲突
422Unprocessable Entity字段校验失败
500Internal Server Error服务端崩溃
502Bad Gateway上游错
503Service Unavailable服务过载

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级名称必须看到什么
L0知道存在知道 HTTP/1.1 文本、HTTP/2 二进制、HTTP/3 在 QUIC 上
L1看得懂示例看到 curl -v 输出能猜到握手、Header、状态码
L2能正确调用能用 curl --http2 / --http3-only 切换协议并解释返回
L3能解释与排错能解释 HPACK/QPACK、0-RTT、ALPN、GOAWAY
L4能设计与扩展能写 nginx 配置启用 h2+h3,能用 nghttp2 库写最小 HTTP/2 client

本计划目标:阶段 9 综合调试时达到 L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

按本仓库统一分类规则(与父主题一致):

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础:网络协议、操作系统、组成原理
  4. 工程技术
  5. Web 与后端:HTTP、REST、Spring Boot、数据库开发等
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力

本计划归属:计算机基础 主 + Web 与后端 辅。


直接依赖(2)

查看知识图谱 · 热度 🔥极高