按用户指示做**一包提交**,不按工作流拆分。本提交刻意混合了多条并行线:
· 本地 ASR 接管:audio 成为与 chat/embed/image/video 同等的路由类别
(IsLocalRoute 单一判据、audio 健康探测、default_audio_route、
auto 占位、GET /api/ai/routes/audio、回退云端时界面明示「音频已出网」)
· LLM 调用层:ctx 贯穿、ToolCall/ToolSchema、EmptyCompletionError /
TransientUpstreamError(按错误类型而非文案判重试)
· 编排 Agent:general_assistant orchestrate/persistence/spec_driver
· 联网搜索:internal/search(playwright)
· 网盘:backend + 前端
· 前端 UI:导航/路由/工作台若干页
· 交付文档:DELIVERY.md / AR04 / 部署文档的「无 Python」表述据实改写,
新增 eai_agentplatform-asr.service、asr.env、clonezilla-cleanup 清 ~/asr-poc
不分拆的原因:dev 早期,粒度不该打断工作节奏。且实测过——这些改动
**在编译上是同一个单元**(llm.go 的 ctx 签名变更牵动 12 个调用点,
chat_message.go 的 ctx 改动又与编排重写同处一个 hunk),拆出来的中间态编不过。
详见 TOP_CODING_RULES.md G14.5 与 bugs_and_errors.md E09。
Co-Authored-By: Claude Code <noreply@anthropic.com>
1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"code":0,"data":{"message":{"role":"assistant","content":"# HTTP/2 vs HTTP/3 对比\n\n\u003e **核心判断**:HTTP/2 修补的是 **HTTP/1.1 的应用层低效**——把请求-响应抽象成\"流\",复用到一条 TCP 连接上;HTTP/3 修补的是 **TCP 协议本身的缺陷**——用基于 UDP 的 QUIC 替换 TCP,让\"流\"的独立性下沉到传输层。所以二者不是简单的版本迭代,而是**优化层次不同**:HTTP/2 在 TCP 之上做多路复用,HTTP/3 直接换掉了 TCP。\n\n---\n\n## 一、先对齐共同点(避免把差异归错地方)\n\n| 维度 | 说明 |\n|---|---|\n| 语义层 | 方法、状态码、首部字段、缓存语义与 HTTP/1.1 基本一致 |\n| 分帧方式 | 均为二进制帧 + 流,非文本协议 |\n| 多路复用 | 均支持一条连接上并发多个流 |\n| 头部压缩 | 均有专门机制(HPACK / QPACK) |\n| 协商 | 均通过 ALPN 协商(`h2` / `h3`);HTTP/3 额外依赖 `Alt-Svc`(RFC 7838)或 HTTPS DNS 记录(RFC 9460 SVCB/HTTPS)发现 |\n\n**含义**:迁移到 HTTP/3 不改业务逻辑,改动集中在传输层与基础设施。\n\n---\n\n## 二、各自解决了什么问题\n\n### 2.1 HTTP/2 解决的 HTTP/1.1 痛点\n\n- **连接数瓶颈** → 单连接多路复用,一条 TCP 承载任意数量并发流。\n- **应用层队头阻塞** → 帧可交错发送,流之间在应用层互不阻塞。\n- **头部冗余** → **HPACK**(RFC 7541):静态表 + 动态表 + 哈夫曼编码,重复首部只传索引。\n- **Server Push**:曾用于主动推送资源,但**实践中失败、已被主流浏览器移除**,不应作为选型理由。\n\n### 2.2 HTTP/2 的遗留问题(正是 HTTP/3 的出发点)\n\n- **TCP 层队头阻塞**:HTTP/2 的\"流\"只是应用层概念,底层仍是**单一字节流**。任一段丢失,内核必须等重传完成才能交付后续数据,**所有流一起被卡住**。丢包率越高,多路复用收益越被抵消。\n- **握手成本高**:TCP 三次握手与 TLS 握手串行,无法合并。\n- **连接与网络绑定**:TCP 连接由四元组标识,Wi-Fi 切蜂窝即断,需重做完整握手。\n- **协议僵化**:TCP 由内核实现、中间盒广泛干预,传输层难以演进。\n\n### 2.3 HTTP/3 的解决方式\n\nHTTP/3(**RFC 9114**)= HTTP over QUIC;QUIC(**RFC 9000**)是用户态实现、内建 TLS 1.3(**RFC 9001**)的可靠传输协议:\n\n- **消除传输层队头阻塞**:QUIC 的流是传输层原生概念,每条流独立流控与重传,丢包只影响该流。\n- **握手合并**:传输握手与 TLS 1.3 握手合并,新建连接 1 RTT,会话恢复可达 0-RTT。\n- **连接迁移**:由 Connection ID 而非 IP/端口标识连接,网络切换时连接存活,仅需路径验证。\n- **QPACK**(RFC 9204):动态表更新走独立单向流,容忍乱序,避免 HPACK 式按序解码阻塞。\n- **默认加密 + 可演进**:除必要字段外全部加密;丢失检测与拥塞控制(RFC 9002)也在用户态,便于快速迭代。\n\n---\n\n## 三、连接建立:RTT 差异\n\n以\"首次能发出第一个请求\"计:\n\n| 场景 | HTTP/2(TCP + TLS) | HTTP/3(QUIC) |\n|---|---|---|\n| 全新连接 | TLS 1.3:**2 RTT**(TCP 1 + TLS 1);TLS 1.2:**3 RTT** | **1 RTT**(传输与加密握手合并) |\n| 会话恢复 | 约 **1 RTT**(TLS 1.3 PSK + 早期数据;TCP 握手无法免除) | **0-RTT** |\n| 网络切换(Wi-Fi ↔ 蜂窝) | 连接断开,**重走完整握手** | **连接迁移**,无需重新握手,仅路径验证 |\n\n\u003e ⚠️ **0-RTT 数据可被重放**,服务端通常只接受幂等或明确安全的请求,不能当作无条件性能红利。\n\u003e 高延迟链路(如跨洲 200ms+)少 1 个 RTT 收益直观;低延迟内网基本感知不到。\n\n---\n\n## 四、传输效率:关键差异\n\n| 维度 | HTTP/2 | HTTP/3 |\n|---|---|---|\n| 承载协议 | TCP | QUIC over UDP(通常 UDP 443) |\n| 丢包影响 | 单包丢失阻塞**整条连接所有流** | 仅阻塞**该流** |\n| 头部压缩 | HPACK,动态表须按序处理 | QPACK,容忍乱序 |\n| 拥塞控制 | 内核 TCP 实现 | 用户态实现(RFC 9002),可调优 |\n| 加密 | 可选(实践普遍启用 TLS 1.2/1.3) | 强制,仅 TLS 1.3 |\n| CPU 开销 | 较低,内核与网卡卸载成熟 | 通常更高,用户态 + per-packet 加密 |\n| 中间盒友好度 | 高,TCP 443 通畅 | 较低,部分企业防火墙/代理屏蔽限速 UDP |\n\n**经验规律**(随网络条件变化,勿套固定百分比):\n- 网络好、丢包低时,HTTP/3 吞吐提升有限,甚至可能因 CPU 开销略降。\n- 丢包、高 RTT、移动场景下,HTTP/3 优势明显放大——此时 TCP 队头阻塞代价最高。\n- **高丢包链路上,HTTP/2 可能比 HTTP/1.1 的多连接模式更差**,这正是\"所有鸡蛋放一个 TCP 篮子\"的后果。\n\n---\n\n## 五、适用场景与选型建议\n\n### 优先 HTTP/2\n- **内部服务间通信(东西向流量)**:数据中心低延迟低丢包,HTTP/3 握手与抗丢包优势无从体现;gRPC 等基于 HTTP/2 的生态成熟。\n- **UDP 受限环境**:企业内网、部分运营商、老旧代理屏蔽/限速 UDP 443,HTTP/3 会回退,不如以 HTTP/2 为主。\n- **服务端 CPU 敏感**:高并发网关、边缘节点,QUIC 用户态成本可能成瓶颈。\n- **需要最大兼容性 / 运维简单**:调试、抓包、负载均衡对 HTTP/2 支持度更高。\n\n### 优先 HTTP/3\n- **面向移动端与弱网用户**:蜂窝、Wi-Fi 抖动大、丢包高的环境,多流并发收益最显著。\n- **高 RTT 跨国/跨洲访问**:少 1 RTT 在 200ms+ 延迟下价值明显。\n- **频繁网络切换的场景**:移动设备在 Wi-Fi/蜂窝间切换,连接迁移避免重握手。\n- **可承担基础设施升级**:需要 CDN/网关/客户端全链路支持 QUIC,并接受 UDP 可达性风险。\n\n### 现实建议\n多数生产环境采取 **HTTP/2 与 HTTP/3 并存、按 ALPN/Alt-Svc 自动协商**的渐进策略:HTTP/2 保底兼容,HTTP/3 对支持且网络受益的客户端优先。不要为了\"版本更新\"而全量切换,应基于**实测丢包率、RTT 分布、CPU 余量、UDP 可达性**四类指标决策。\n\n---\n\n## 六、来源与说明\n\n**规范类(稳定、可直接引用)**\n- HTTP/2:RFC 7540(2015),后被 **RFC 9113**(2022)取代\n- HPACK:RFC 7541 | QPACK:**RFC 9204**\n- HTTP/3:**RFC 9114**(2022)\n- QUIC:**RFC 9000** | TLS over QUIC:**RFC 9001** | 丢失检测与拥塞控制:**RFC 9002**\n- Alt-Svc:RFC 7838 | HTTPS/SVCB DNS 记录:RFC 9460\n\n**关于实时部署数据的说明**:子任务中虽发起了联网检索,但**未返回可引用的实测结果**。因此本文的 RTT、丢包影响、CPU 开销等均为**基于 RFC 协议的定性结论**,未使用具体部署占比或性能百分比数字。若需精确的 HTTP/3 采用率、CDN 实测吞吐对比,建议以 Cloudflare、Google、Akamai 等 CDN 的官方技术博客或 W3Techs 统计为独立来源单独核实,避免跨来源口径混用。\n\n**评审遗留项**:原综合稿在\"优先选择 HTTP/3 的场景\"处被截断,本文已补全第五节场景清单与选型建议。\n\n\u003cdetails\u003e\u003csummary\u003e📋 本次由通用编排拆分执行\u003c/summary\u003e\n\n##### 梳理 HTTP/2 的核心机制与解决的问题\n\nI'll start by gathering authoritative primary sources (RFCs, standards bodies) and current deployment data.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/2 RFC 7540 core mechanisms multiplexing HPACK stream prioritization\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 RFC 9114 QUIC RFC 9000 connection establishment 0-RTT TLS 1.3\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 梳理 HTTP/3 的核心机制与解决的问题\n\nI'll research this topic with authoritative sources before answering.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 RFC 9114 QUIC RFC 9000 differences from HTTP/2\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/2 head-of-line blocking TCP vs HTTP/3 QUIC stream independence\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 对比 HTTP/2 与 HTTP/3 的连接建立过程与 RTT 差异\n\nI'll research this with authoritative sources (RFCs, measurement studies, and deployment data) before writing the comparison.\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eRFC 9113 HTTP/2 RFC 9114 HTTP/3 specification differences\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 QUIC connection establishment 1-RTT 0-RTT handshake TLS 1.3 vs HTTP/2 TCP TLS\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 对比 HTTP/2 与 HTTP/3 的传输效率、队头阻塞与头部压缩\n\n我先联网核实几个关键事实(RFC 编号、规范状态、实测数据),再给出对比。\n\n\u003c||DSML|| calls\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eRFC 9113 HTTP/2 RFC 9114 HTTP/3 specification\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c||DSML|| invoke name=\"web_search\"\u003e\n\u003c||DSML|| parameter name=\"query\" string=\"true\"\u003eHTTP/3 QUIC connection establishment 0-RTT 1-RTT vs TCP TLS handshake latency\u003c/||DSML|| parameter\u003e\n\u003c/||DSML|| invoke\u003e\n\u003c/||DSML|| calls\u003e\n\n##### 综合整理适用场景与选型建议\n\n## 一句话结论\n\nHTTP/2 是对 **HTTP/1.1 应用层低效**的修补,它把请求-响应抽象成\"流\"并复用一条 TCP 连接;HTTP/3 则是对 **TCP 本身缺陷**的修补,它把传输层换成基于 UDP 的 QUIC,让\"流\"的独立性下沉到传输层。因此两者的差别不只是版本号,而是**优化层次不同**:HTTP/2 在 TCP 之上做多路复用,HTTP/3 直接换掉了 TCP。\n\n---\n\n## 一、先对齐基线:两者的共同点\n\n对比之前先明确它们**没有变**的部分,避免把差异归错地方:\n\n| 维度 | 说明 |\n|---|---|\n| 语义层 | 请求方法、状态码、首部字段、缓存语义与 HTTP/1.1 基本一致 |\n| 二进制分帧 | 都由帧(frame)与流(stream)组成,均非文本协议 |\n| 多路复用 | 都支持在一条连接上并发多个流 |\n| 头部压缩 | 都有专门的头部压缩机制(HPACK / QPACK) |\n| 加密现状 | 公网部署中基本都跑在 TLS 之上(HTTP/3 强制加密) |\n| 协商方式 | 都通过 ALPN 协商(`h2` / `h3`),HTTP/3 额外依赖 `Alt-Svc` 或 HTTPS DNS 记录发现 |\n\n**结论**:选择 HTTP/3 不需要改动应用代码的业务逻辑,改动集中在传输层与基础设施。\n\n---\n\n## 二、各自解决了什么问题\n\n### 2.1 HTTP/2 解决的问题\n\n针对 HTTP/1.1 的四个痛点:\n\n- **连接数瓶颈**:浏览器对同域并发连接限制(通常 6 条),导致大量请求排队。\n → HTTP/2 用**单连接多路复用**:一条 TCP 连接承载任意数量的并发流。\n- **应用层队头阻塞**:HTTP/1.1 的 pipelining 因响应必须按序返回而实际不可用。\n → HTTP/2 的帧可以交错发送,流之间在应用层互不阻塞。\n- **头部冗余**:每个请求重复携带 Cookie、User-Agent 等大字段。\n → **HPACK**(RFC 7541)用静态表 + 动态表 + 哈夫曼编码压缩,重复首部只传索引。\n- **服务器主动推送资源**:曾由 Server Push 承担。\n → **注意**:Server Push 在实践中失败并被主流浏览器移除,不建议作为选型理由。\n\n### 2.2 HTTP/2 遗留的问题(正是 HTTP/3 的出发点)\n\n- **TCP 层队头阻塞**:HTTP/2 的\"流\"只是应用层概念,底层仍是**单一字节流**。任何一个 TCP 段丢失,内核必须等它重传完成后才能把后续数据交给应用层——**所有流一起被卡住**。丢包率越高,多路复用的收益越被抵消。\n- **握手成本高**:TCP 三次握手与 TLS 握手是串行的,无法合并。\n- **连接与网络绑定**:TCP 连接由四元组标识,Wi-Fi 切到蜂窝网络即断开,必须重做完整握手。\n- **协议僵化**:TCP 由内核实现、中间盒广泛干预,传输层难以演进。\n\n### 2.3 HTTP/3 解决的问题\n\nHTTP/3(RFC 9114)是\"HTTP over QUIC\",而 QUIC(RFC 9000)本身是一个在用户态实现的、内建 TLS 1.3 的可靠传输协议:\n\n- **消除传输层队头阻塞**:QUIC 的流是**传输层的原生概念**,每条流有独立的流控与重传。丢包只阻塞受影响的那条流,其他流照常交付。\n- **握手次数下降**:QUIC 把传输握手与 TLS 1.3 握手(RFC 9001)**合并**,新建连接 1 RTT,会话恢复可做到 0-RTT。\n- **连接迁移**:连接由 Connection ID 而非 IP/端口标识,网络切换时连接可存活,代价是路径验证而非完整重握手。\n- **头部压缩适配乱序**:QPACK(RFC 9204)用独立的单向流传输动态表更新,避免像 HPACK 那样要求严格按序解码而阻塞其他流。\n- **默认加密 + 可演进**:除少数必要字段外全部加密,用户态实现使协议可以快速迭代(RFC 9002 定义的丢失检测与拥塞控制也在用户态)。\n\n---\n\n## 三、连接建立:RTT 差异\n\n以\"首次建立连接到能发出第一个请求\"计:\n\n| 场景 | HTTP/2(TCP + TLS) | HTTP/3(QUIC) |\n|---|---|---|\n| 全新连接 | TLS 1.3:**2 RTT**(TCP 1 + TLS 1)\u003cbr\u003eTLS 1.2:**3 RTT**(TCP 1 + TLS 2) | **1 RTT**(传输与加密握手合并) |\n| 会话恢复 | TLS 1.3 PSK + 早期数据:约 **1 RTT**(TCP 握手无法免除) | **0-RTT**(重放风险需服务端策略约束) |\n| 网络切换(Wi-Fi ↔ 蜂窝) | 连接断开,需**重新走完整握手** | **连接迁移**,无需重新握手,仅做路径验证 |\n\n补充说明:\n\n- 0-RTT 数据**可被重放**,因此服务端通常只接受幂等或明确安全的请求,不应把它当作无条件的性能红利。\n- 在高延迟链路上,减少 1 个 RTT 的收益很直观;在低延迟内网中,这一优势基本感知不到。\n\n---\n\n## 四、传输效率:关键差异\n\n| 维度 | HTTP/2 | HTTP/3 |\n|---|---|---|\n| 承载协议 | TCP | QUIC over UDP(通常 UDP 443) |\n| 丢包影响 | 单包丢失阻塞**整条连接上的所有流** | 仅阻塞**该流** |\n| 头部压缩 | HPACK,动态表更新要求按序处理 | QPACK,动态表更新走独立单向流,容忍乱序 |\n| 拥塞控制 | 内核 TCP 实现 | 用户态实现(RFC 9002),可按应用调优 |\n| 加密 | 可选(实践中普遍启用 TLS 1.2/1.3) | 强制,仅 TLS 1.3 |\n| CPU 开销 | 较低,内核与网卡卸载成熟 | 通常更高,用户态处理与 per-packet 加密 |\n| 中间盒友好度 | 高,TCP 443 通畅 | 较低,部分企业防火墙/代理屏蔽或限速 UDP |\n\n**效率判断的经验规律**(随网络条件变化,不宜套用固定百分比):\n\n- 网络质量好、丢包率低时,HTTP/3 相对 HTTP/2 的吞吐提升有限,甚至可能因 CPU 开销略降。\n- 网络丢包、高 RTT、移动场景下,HTTP/3 的优势明显放大——因为此时 TCP 队头阻塞的代价最高。\n- HTTP/2 在**高丢包链路**上会退化得比 HTTP/1.1 的多连接模式更差,这是\"所有鸡蛋放在一个 TCP 篮子\"的直接后果。\n\n---\n\n## 五、适用场景与选型建议\n\n### 5.1 优先选择 HTTP/2 的场景\n\n- **内部服务间通信(东西向流量)**:数据中心网络低延迟、低丢包,HTTP/3 的握手与抗丢包优势无法体现;gRPC 等基于 HTTP/2 的生态已成熟。\n- **UDP 受限环境**:企业内网、部分运营商网络、老旧代理设备屏蔽或限速 UDP 443。此时 HTTP/3 会回退到 HTTP/2,不如直接以 HTTP/2 为主。\n- **服务端 CPU 敏感**:高并发网关、边缘计算节点上,QUIC 的用户态加密与处理成本可能成为瓶颈。\n- **需要最大兼容性**:面向未知客户端群体、中间件链路复杂的场景。\n- **运维复杂度优先**:HTTP/2 的调试、抓包、负载均衡支持度更高。\n\n### 5.2 优先选择 HTTP/3 的场景\n\n- **面向移动端与弱网用户**:蜂窝网络、Wi-Fi 抖动大、丢包率高的环境,多流并发时收益最显著。\n- **高 RTT 跨国/跨洲访问**:少一个 RTT 的握手成本在 200ms+ 延迟下价值明显\n\n##### 审核技术准确性、逻辑一致性与用户要求覆盖度\n\n# 评审意见:HTTP/2 vs HTTP/3 对比材料\n\n## 总体结论\n\n**判断:技术准确性高,可沿用;但作为交付物「未完成」,且有三处表述需要收紧。**\n\n- 材料对核心机制的定性(分层优化、队头阻塞的层次、握手合并、连接迁移)**准确且有洞察**,RFC 引用逐条核对无误,是一份质量在平均线以上的对比稿。\n- **最严重的问题不是内容错,而是产物被截断**:正文停在 5.2「高 RTT 跨国/跨洲访问」一句中间,用户明确要求的\"适合什么场景\"只答了一半。\n- 若干表述过于绝对,会在被追问时露怯,需要加限定词。\n\n---\n\n## 一、技术准确性审核\n\n### 1.1 抽查确认无误的关键事实(可直接采信)\n\n| 断言 | 判定 | 依据 |\n|---|---|---|\n| HPACK = RFC 7541、QPACK = RFC 9204 | 【事实】✓ | RFC 编号正确 |\n| HTTP/3 = RFC 9114、QUIC = RFC 9000、TLS over QUIC = RFC 9001、丢失检测/拥塞控制 = RFC 9002 | 【事实】✓ | 全部正确 |\n| TLS 1.3 全新连接 = TCP\n\n\u003c/details\u003e","timestamp":"2026-09-25 22:02:48","type":"text"},"is_plan":false,"is_expert":false,"stream":false},"error":null,"message":"success"} |