Skip to content

tracking: HTTP/3 features needed by uvscope 0.4 #53

Closed

Description

@Antruly

uvscope 0.4 的 HTTP/3 / QUIC 调试依赖清单。每一项单独提交、单独验证;在清单完成前,uvscope 发布构建保持关闭 h3。

清单

  • HTTP/3:GOAWAY(平滑退场、last stream id)—— 1e2de0f(2026-10-20)。
    uvcpp_h3_connection::shutdown_notice() / shutdown() / is_drained(),
    对端 GOAWAY 走 callbacks::on_goaway + peer_goaway_received() /
    peer_goaway_last_stream_id();uvcpp_http_client 同名转发并把 id 以上的
    在途请求标 retryable。用例 http3_goaway_func。
  • HTTP/3:trailers —— 53dac78(2026-10-20)。会话/连接层 trailers 字段与
    submit_trailers();web 层 uvcpp_http_request/response::trailers。用例
    http3_trailers_func。请求 trailers 要求有 body(nghttp3 语义)。
  • HTTP/3:extended CONNECT(WebSocket over h3)—— 1023c0f 前一批已完成:
    enable_connect_protocol + :protocol + uvcpp_h3_ws_connection(RFC 6455 帧、
    无掩码;无 permessage-deflate)。用例 http3_ext_connect_func / http3_ws_func。
  • QUIC:0-RTT 发送与 early_data 状态 —— 1023c0f。服务端 set_max_early_data();
    客户端票据 + 0-RTT 传输参数复用、握手前写数据;early_data_status() /
    early_data_rejected()(0 NOT_SENT / 1 REJECTED / 2 ACCEPTED)。用例
    quic_early_data_func(本机 ACCEPTED)。无状态重置与 multipath 仍没有。
  • QUIC:连接迁移事件与路径变化通知 —— 517428b + 86867e0。
    被动通知 on_path_validation / on_path_changed;客户端主动迁移
    uvcpp_quic_client::migrate_local_address()。用例 quic_migration_func /
    quic_active_migration_func。
  • QUIC:datagram(RFC 9221)收发 —— 5709aa2(2026-10-20)。
    uvcpp_quic_connection::send_datagram() / callbacks::on_datagram /
    max_datagram_size();宣告 max_datagram_frame_size=1400,发送队列 1 MiB
    上限。用例 quic_datagram_func。
  • QUIC:原始 bidi/uni stream 的公开收发接口(用于调试器)—— 1.4.1 起已有:
    uvcpp_quic_connection::open_stream(bool bidi) / write_stream() /
    callbacks::on_read / on_stream_open / on_streams_available。无需新增。
  • QPACK:部分可观测(86867e0):对端 SETTINGS(表容量/阻塞流上限)与
    deferred_consume 计数已暴露。精确的当前动态表大小/当前阻塞流数仍拿不到
    —— nghttp3 1.18 公开头没有访问器(tracking: HTTP/3 features needed by uvscope 0.4 #53 里唯一剩下的阻塞项)。
  • 三平台 CI 已覆盖(http3/quic 格);真实公网端点回归加了按需探针
    http3_public_endpoint_func(UVCPP_TEST_H3_ENDPOINT=host:port,默认 SKIP;
    本机沙箱的 DNS 被劫持到 198.18/15,实际回归要在有外网的机器上跑)。

备注

  • #53 的其余项(trailers / 0-RTT / 迁移 / datagram / extended CONNECT)是协议级
    特性,不是接线:每一项都要动 uvcpp_quic_session 的收/发路径(datagram 还要在
    do_flush 里接 ngtcp2_conn_writev_datagram)或 uvcpp_h3_session 的头块状态机
    (trailers 是同一流上的第二个头块),并按 issue 的规矩逐项提交、逐项验证。
  • 0-RTT / 连接迁移在 doc/quic-guide.md §8 里一直标注为"不在路线图上,等真实需求",
    这项清单把它们提到了 0.4 的依赖里;动之前需要确认 uvscope 侧的具体契约
    (early_data 失败的接受语义、迁移时应用层要不要看到路径变化)。

Activity

  1. Antruly commented on Oct 20, 2026

    @Antruly
    OwnerAuthor

    QPACK 精确统计的上游请求已开:ngtcp2/nghttp3#566(英文说明当前公开面缺口与建议的 getter/stats 形状)。等上游回复后再决定是否做 PR;在这之前 #53 的这一格按上游 API 缺失记为阻塞。

  2. Antruly commented on Oct 28, 2026

    @Antruly
    OwnerAuthor

    清单全部勾完:GOAWAY、trailers、extended CONNECT(WebSocket over h3)、0-RTT、连接迁移、DATAGRAM、原始流、QPACK 部分可观测(精确动态表大小受 nghttp3 公开头限制,已在条目里如实标注)。1.9.0 又补了 h3 的 webapp 尾随头与流式响应。这条 tracking 关闭。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions