Markdown Version | Session Recording
Session Date/Time: 24 Mar 2022 13:30
webtrans
Summary
The webtrans working group met to discuss updates from the W3C WebTransport API, key issues concerning WebTransport over HTTP/3, and WebTransport over HTTP/2. Discussions included the W3C API status, implementation challenges, session pooling and resource limits for HTTP/3, and the use of capsules versus TLVs for HTTP/2, with a particular focus on the implications for intermediaries and end-to-end semantics. Decisions were made regarding graceful session termination, GoAway behavior, stream closure, and resource limits for pooling, while a new design team was formed to tackle the capsule unification for HTTP/2 and HTTP/3. Stream prioritization was acknowledged as primarily an API concern.
Key Discussion Points
W3C API Update (Will Law)
- Progress: The WebTransport API specification is now a Working Draft (March 11, 2022).
- Timetable: An optimistic timetable aims for Candidate Recommendation (CR) soon, with a Proposed Recommendation (PR) by July 31st, requiring at least two independent implementations.
- Implementation Blocker: Chrome has shipped (M97), but Mozilla has not yet signaled a date for their implementation, challenging the July 31st PR target. The charter may be extended if needed.
- Milestones: Adjusted to match the release process, with a new "Candidate Recommendation" milestone.
- Key Decisions (Resolved Issues):
- Clients should not provide credentials when establishing a session.
- Blocking ports on
fetch's bad ports list. - Adding smooth RTT variation to
WebTransportStats. - Adding
packetsLosttoWebTransportStats. - Extra requirements on server certificate hashes.
WebTransportGetStatsadditions:expiredOutgoing,droppedIncomingDatagramsLost.- Stream stats will be individual
getStatsmethods on each stream instance. - Decisions around reliability, fallback, and constructor arguments (
requireUnreliablevs.requestReliable). - Content Security Policy (CSP) compatibility break with early Chrome versions for future stability.
- Datagram priority over streams: Changed to normative language ensuring user agents prioritize datagrams quickly, replacing an absolute "always go first" rule.
- Current Issues Under Debate:
- Bike-shedding names for stream stats.
- Connection pooling: Default on or off, constructor configuration.
- Priorities between streams: Is this necessary, and does IETF intend to define a method that filters to the browser level?
Priorities Discussion
- IETF Input Sought: W3C asked for IETF input on stream prioritization.
- Schemes: HTTP (8 levels) and WebRTC (4 levels) were mentioned as potential models.
- API vs. Wire Protocol: General consensus that stream prioritization is largely an API concern (how web applications signal priorities to the browser), rather than a core wire-protocol problem for the IETF WebTransport WG, unless end-to-end signaling is strictly required.
- Application-Level Solutions: It was noted that applications can use WebTransport streams/datagrams to signal priority themselves.
- Use Cases: A use case for dynamically prioritizing newer over older media segments (e.g., video/audio) was presented, which might require more flexible control than a small fixed set of priorities. This would require browser support for client-side sending.
- Congestion Control: Discussion touched upon desired control over congestion control algorithms (e.g., BBR, Google CC) and the potential for hints in the API.
- W3C Issue 62: Participants were encouraged to comment on W3C issue 62 for further discussion on priority.
- Conclusion: The WG reiterated its philosophy to focus on shipping a functional WebTransport and defer application-layer concerns or advanced features (like fine-grained congestion control) to future versions or extensions if current API/protocol capabilities prove insufficient.
WebTransport over HTTP/3 and HTTP/2
- Overview Draft (Victor Vasiliev):
- The overview draft needs updating to abstract common operations between HTTP/3 and HTTP/2 WebTransport implementations. A pull request is in progress.
- Graceful Session Termination (GoAway):
- Need a mechanism for intermediaries (e.g., reverse proxies) to signal a graceful shutdown of WebTransport sessions. A
DRAIN_WEBTRANSPORT_SESSIONcapsule was proposed. - Decision: Alan Frindell will author a Pull Request for a
DRAIN_WEBTRANSPORT_SESSIONcapsule.
- Need a mechanism for intermediaries (e.g., reverse proxies) to signal a graceful shutdown of WebTransport sessions. A
- GoAway and WebTransport Session Creation:
- HTTP/2
GOAWAYprevents new streams on the HTTP/2 connection but allows existing streams to finish. For WebTransport, this means no new WebTransport sessions can be created on the underlying HTTP/2 connection, but existing WebTransport sessions can still create their own streams. This behavior should be preserved for HTTP/3. - Decision: Consensus to maintain this behavior:
GOAWAYmeans no new WebTransport sessions, but existing sessions can continue creating their internal streams.
- HTTP/2
- Closing Connect Stream:
- Current draft behavior: Closing the
CONNECTstream automatically terminates everything in the WebTransport session. This was suggested to be revisited for potentially allowing internal streams to remain open. - Discussion: Keeping the current semantics (closing
CONNECTstream terminates everything) simplifies resource lifecycle management and is consistent with QUIC connection closure. - Decision: Consensus to keep the current semantics where closing the
CONNECTstream automatically terminates the WebTransport session.
- Current draft behavior: Closing the
- Alt-Svc Header Handling:
- Question: How should
Alt-Svcheaders affect WebTransport? - Discussion:
Alt-Svcin a response should not impact an active WebTransport session. BroaderAlt-Svcinteractions with connections are typically handled by the HTTP working group. - Decision: The WebTransport draft will consider
Alt-Svcinteractions outside its immediate scope, deferring to HTTP WG.
- Question: How should
Pooling and Resource Limits for HTTP/3 (Eric Kinnear)
- Goal: Support multiple WebTransport sessions within a single HTTP/3 connection and allow coexistence with regular HTTP requests.
- HTTP/2 vs HTTP/3: Less of an issue for HTTP/2 as each session is encapsulated in a
CONNECTstream. HTTP/3 needs more specific mechanisms as WebTransport uses native H3 streams. - Proposal: Implement necessary resource limits to prevent one WebTransport session from unfairly dominating the H3 connection. No preclusion of future enhancements.
- Existing Flow Control: H3 inherits stream-level flow control from QUIC (
MAX_STREAM_DATA,MAX_STREAMS). - Additional Needs:
- Maximum Session Count: Limit the number of WebTransport sessions (e.g., via a
WEBTRANSPORT_MAX_SESSIONSsetting). - Maximum Streams per Session: Limit the number of streams a single WebTransport session can open.
- Maximum Data per Session: Limit total data across all streams within a WebTransport session.
- Maximum Session Count: Limit the number of WebTransport sessions (e.g., via a
- Discussion on Max Data per Session: This was deemed technically very challenging, potentially requiring significant architectural contortions or layer violations with QUIC.
- Decisions on Pooling:
- Limit total WebTransport session count via settings: Consensus (e.g., a
WEBTRANSPORT_MAX_SESSIONSsetting). - Limit max streams per WebTransport session: Consensus to attempt implementation by authoring a PR, acknowledging potential difficulties.
- Limit total data per WebTransport session: Consensus that this is too hard currently. The issue will be closed, and can only be reopened if a concrete, implemented design is presented to the WG.
- Limit total WebTransport session count via settings: Consensus (e.g., a
WebTransport over HTTP/2 (Eric Kinnear)
- Progress: Many changes discussed at IETF 112 have been landed. The HTTP Datagram design team concluded, unblocking further work.
- Sending Frames Before CONNECT Response:
- Current text: Frames can only be sent after receiving a 200 OK response to the initial
CONNECTrequest. - Proposal: Allow sending frames before the
CONNECTresponse, subject to flow control. This reduces RTT and allows server-initiated streams to start sooner. - Decision: Consensus to allow sending frames before the
CONNECTresponse is received.
- Current text: Frames can only be sent after receiving a 200 OK response to the initial
- Capsules vs. TLVs:
- Context: HTTP Datagrams now define a
DATAGRAMcapsule. Current H2 WebTransport uses TLVs for its frames. - Proposal: Switch to using capsules for H2 WebTransport frames.
- Benefits: Can reuse the
DATAGRAMcapsule. Potentially reuseMAX_STREAMSandSTREAMS_BLOCKEDcapsules (if defined for H3). - Core Issue: End-to-end vs. Hop-by-hop: TLVs were hop-by-hop. Capsules are conceptually end-to-end but can be converted by intermediaries (e.g.,
DATAGRAMcapsule to native datagram). How does this affect stream-related control (which is inherently hop-by-hop)? - Discussion:
- Intermediating stream constraints between H2 and H3 is complex; it might be better to treat H2 and H3 WebTransport as different protocol segments for an intermediary.
- The
end-to-endproperty of capsules is the litmus test; if it's harmful for certain control frames, they shouldn't be capsules. - While H2 TLVs are wire-format compatible, the semantic implications of a shared registry and end-to-end behavior need careful consideration.
- Conclusion: This is a complex issue requiring further focused work.
- Context: HTTP Datagrams now define a
Decisions and Action Items
DRAIN_WEBTRANSPORT_SESSIONCapsule: Alan Frindell to author a Pull Request for this new capsule.- GoAway Behavior: Keep current semantics:
GOAWAYprevents new WebTransport sessions, but existing sessions can continue creating new streams. - Closing
CONNECTStream: Keep current semantics: Closing theCONNECTstream automatically terminates the WebTransport session. - WebTransport Pooling for HTTP/3:
- ACTION: Eric Kinnear to author a PR for a
WEBTRANSPORT_MAX_SESSIONSsetting (or similar) to limit the total number of WebTransport sessions. - ACTION: Eric Kinnear to author a PR for limiting the maximum number of streams per WebTransport session, with the understanding that implementation experience will determine feasibility.
- DECISION: The issue of limiting total data per WebTransport session will be closed as too complex for now, to be revisited only with a concrete, implemented proposal.
- ACTION: Eric Kinnear to author a PR for a
- HTTP/2 Frame Sending: Allow sending frames before the
CONNECTresponse is received. (Action: Eric Kinnear to update draft). - Capsule Unification for HTTP/2 and HTTP/3: A design team will be formed to explore the use of capsules for WebTransport over HTTP/2, addressing end-to-end vs. hop-by-hop semantics and unification with H3 capsule definitions.
Next Steps
- Design Team for Capsules:
- Chairs will send an email to the mailing list asking for volunteers for this design team.
- Eric Kinnear has volunteered to lead this design team.
- The team will aim for a rapid iteration, potentially leading to an interim meeting for discussion.
- W3C Issue 62 (Priorities): Participants interested in stream prioritization should engage with W3C issue 62.
- Pull Requests: Authors of PRs (Alan Frindell, Eric Kinnear) should proceed with drafting and submitting them.