<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-httpbis-h3-unbound-data-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Unbound DATA for CONNECT in HTTP/3">Unbound DATA for CONNECT in HTTP/3</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-httpbis-h3-unbound-data-02"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="27"/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <keyword>http</keyword>
    <keyword>data</keyword>
    <keyword>unbound</keyword>
    <abstract>
      <?line 44?>

<t>This document defines a new HTTP/3 frame type, <tt>UNBOUND_DATA</tt>, and a corresponding <tt>SETTINGS</tt> parameter that enables endpoints to negotiate its use. When an endpoint sends an <tt>UNBOUND_DATA</tt> frame on a CONNECT request or response stream, it indicates that all subsequent octets on that stream are interpreted as tunneled bytes. This applies both to octets transmitted after CONNECT or extended CONNECT. The use of <tt>UNBOUND_DATA</tt> removes the need to encapsulate each portion of the data in <tt>DATA</tt> frames, reducing framing overhead and simplifying transmission of long-lived CONNECT tunnels.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/draft-httpbis-h3-unbound-data/draft-rosomakho-httpbis-h3-unbound-data.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-httpbis-h3-unbound-data/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaroslavros/draft-httpbis-h3-unbound-data"/>.</t>
    </note>
  </front>
  <middle>
    <?line 48?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="H3"/> transmits message content on client-initiated bidirectional QUIC streams. On these streams, the request and response messages are carried using a sequence of HTTP/3 frames. The <tt>DATA</tt> frame is used to encapsulate octets of the opaque data associated with CONNECT and its extensions.</t>
      <t>CONNECT and extended CONNECT establish long-lived bidirectional tunnels. These tunnels commonly carry transport protocols (TCP <xref target="CONNECT-TCP"/>, UDP <xref target="CONNECT-UDP"/>, IP <xref target="CONNECT-IP"/>, Ethernet <xref target="CONNECT-ETHERNET"/>, <xref target="WebSockets"/>, <xref target="WebTransport"/>) that produce arbitrarily fragmented and continuous byte streams. Senders therefore generate large numbers of DATA frames whose boundaries have no semantic meaning. Although DATA frames are lightweight, each adds framing overhead and requires the sender to manage frame boundaries. For long-lived or high-volume streams, this overhead is unnecessary because the end of the QUIC stream already provides a natural message boundary.</t>
      <t>According to <xref section="4.4" sectionFormat="of" target="H3"/>, once HTTP/3 CONNECT tunnel is established, the stream carries opaque bytes until the QUIC FIN. CONNECT streams do not carry trailers and no additional HTTP frames are defined after tunnel establishment. Therefore, ceasing frame parsing after <tt>UNBOUND_DATA</tt> does not change HTTP semantics and only removes framing overhead.</t>
      <t>This document defines a new HTTP/3 frame type, <tt>UNBOUND_DATA</tt>, and a corresponding <tt>SETTINGS</tt> parameter that endpoints use to negotiate support. Once an <tt>UNBOUND_DATA</tt> frame is sent on a CONNECT stream, all subsequent octets on that stream are interpreted as data. This mechanism eliminates the need to encapsulate each portion of the tunnel payload in separate DATA frames.</t>
      <t>The goals of <tt>UNBOUND_DATA</tt> are:</t>
      <ul spacing="normal">
        <li>
          <t>Reduce framing overhead for CONNECT tunnels carrying continuous byte streams.</t>
        </li>
        <li>
          <t>Simplify sender and receiver state machines by eliminating repeated DATA frame headers.</t>
        </li>
        <li>
          <t>Enable efficient transport of tunneled protocols carried over CONNECT streams.</t>
        </li>
      </ul>
      <t>The use of UNBOUND_DATA does not alter HTTP semantics, flow control, or prioritization; it is strictly a framing optimization.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="capability-negotiation">
      <name>Capability Negotiation</name>
      <t>Endpoints indicate support for unbound data transmission by sending the <tt>SETTINGS_ENABLE_UNBOUND_DATA</tt> (0x282cf6bb) setting with a value of 1.</t>
      <t>The valid values of the <tt>SETTINGS_ENABLE_UNBOUND_DATA</tt> setting are 0 and 1. If the <tt>SETTINGS_ENABLE_UNBOUND_DATA</tt> setting is received with a different value, the receiver <bcp14>MUST</bcp14> treat it as a connection error of type <tt>H3_SETTINGS_ERROR</tt>.</t>
      <t>A value of 1 indicates that the sender of the SETTINGS frame is willing to receive <tt>UNBOUND_DATA</tt> frames.</t>
      <t>Endpoints <bcp14>MUST NOT</bcp14> send an <tt>UNBOUND_DATA</tt> frame to a peer that has not advertised <tt>SETTINGS_ENABLE_UNBOUND_DATA</tt> with a value of 1. Endpoints that receive an <tt>UNBOUND_DATA</tt> frame without having advertised support <bcp14>MUST</bcp14> treat it as a connection error of type <tt>H3_FRAME_UNEXPECTED</tt>.</t>
      <t>The <tt>SETTINGS_ENABLE_UNBOUND_DATA</tt> parameter is directional: each endpoint independently advertises whether it accepts receiving <tt>UNBOUND_DATA</tt>. An endpoint that has not indicated support cannot be assumed to understand or correctly process the frame.</t>
    </section>
    <section anchor="unbounddata-frame">
      <name>UNBOUND_DATA Frame</name>
      <t>The <tt>UNBOUND_DATA</tt> frame (type=0x2a937388) is used on CONNECT streams to indicate that all subsequent octets on the stream are interpreted as data.</t>
      <section anchor="frame-layout">
        <name>Frame Layout</name>
        <figure anchor="fig-unbound-data-frame">
          <name>HTTP/3 UNBOUND_DATA Frame</name>
          <artwork><![CDATA[
UNBOUND_DATA Frame {
  Type (i) = 0x2a937388,
  Length (8) = 0,
}
]]></artwork>
        </figure>
        <t>The <tt>UNBOUND_DATA</tt> frame has no payload. The Length field of the frame <bcp14>MUST</bcp14> be zero. If a nonzero length is received, the endpoint <bcp14>MUST</bcp14> treat this as a connection error of type <tt>H3_FRAME_ERROR</tt>.</t>
        <t>The <tt>UNBOUND_DATA</tt> frame is only valid on CONNECT streams. If an endpoint receives an <tt>UNBOUND_DATA</tt> frame on a stream that is not a CONNECT stream, it <bcp14>MUST</bcp14> treat it as a connection error of type <tt>H3_FRAME_UNEXPECTED</tt>.</t>
        <t>Similar to <tt>DATA</tt> frames, endpoints <bcp14>MUST</bcp14> send a <tt>HEADERS</tt> frame before sending an <tt>UNBOUND_DATA</tt> frame on a given stream. Receipt of an <tt>UNBOUND_DATA</tt> frame on a stream that hasn't received a <tt>HEADERS</tt> frame <bcp14>MUST</bcp14> be treated as a connection error of type <tt>H3_FRAME_UNEXPECTED</tt>.</t>
      </section>
      <section anchor="semantics">
        <name>Semantics</name>
        <t>Upon receiving an <tt>UNBOUND_DATA</tt> frame on a CONNECT stream, the receiver enters unbound mode for that stream. In unbound mode:</t>
        <ul spacing="normal">
          <li>
            <t>All remaining octets on the stream, up to the QUIC FIN, are interpreted as data.</t>
          </li>
          <li>
            <t>No further HTTP/3 frames (including <tt>DATA</tt>, <tt>HEADERS</tt>, or any extension frames) can be received on the stream.</t>
          </li>
          <li>
            <t>The end of the data is indicated by the QUIC FIN on the stream.</t>
          </li>
        </ul>
        <t>Unbound mode is direction-specific: receipt of <tt>UNBOUND_DATA</tt> only affects the interpretation of octets received in that direction of the stream. Each endpoint can independently send <tt>UNBOUND_DATA</tt> to indicate unbound mode for its sending direction.</t>
      </section>
    </section>
    <section anchor="stream-state-transitions">
      <name>Stream State Transitions</name>
      <t>The use of the <tt>UNBOUND_DATA</tt> frame modifies the sequence of frames exchanged on request and response streams.</t>
      <t>In normal operation, a CONNECT request or response is carried as a sequence of one or more <tt>DATA</tt> frames:</t>
      <figure anchor="fig-regular-http3-state">
        <name>Regular HTTP/3 CONNECT frame sequence on bi-directional stream</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="520" viewBox="0 0 520 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,96" fill="none" stroke="black"/>
              <path d="M 256,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 312,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 312,64 L 512,64" fill="none" stroke="black"/>
              <path d="M 256,96 L 288,96" fill="none" stroke="black"/>
              <path d="M 312,96 L 512,96" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="296,96 284,90.4 284,101.6" fill="black" transform="rotate(0,288,96)"/>
              <polygon class="arrowhead" points="296,32 284,26.4 284,37.6" fill="black" transform="rotate(0,288,32)"/>
              <g class="text">
                <text x="16" y="36">New</text>
                <text x="92" y="36">bi-direcitonal</text>
                <text x="172" y="36">QUIC</text>
                <text x="220" y="36">stream</text>
                <text x="352" y="52">HEADERS</text>
                <text x="424" y="52">(headers)</text>
                <text x="328" y="84">[</text>
                <text x="356" y="84">DATA</text>
                <text x="392" y="84">...</text>
                <text x="416" y="84">]</text>
                <text x="196" y="100">QUIC</text>
                <text x="232" y="100">FIN</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  New bi-direcitonal QUIC stream ---->  +------------------------+
                                        | HEADERS (headers)      |
                                        +------------------------+
                                        | [ DATA ... ]           |
                        QUIC FIN ---->  +------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>When <tt>UNBOUND_DATA</tt> is used, the sender signals that all subsequent octets on the stream are data. Regular <tt>DATA</tt> frames <bcp14>MAY</bcp14> be sent on a stream prior to the <tt>UNBOUND_DATA</tt>. After the <tt>UNBOUND_DATA</tt> frame, the sender cannot send any further HTTP/3 frames on the stream. The end of the tunnel is signaled by the QUIC stream FIN:</t>
      <figure anchor="fig-regular-http3-unbound-state">
        <name>HTTP/3 Frame sequence with UNBOUND_DATA</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="520" viewBox="0 0 520 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 312,32 L 312,160" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,160" fill="none" stroke="black"/>
              <path d="M 256,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 312,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 312,64 L 512,64" fill="none" stroke="black"/>
              <path d="M 312,96 L 512,96" fill="none" stroke="black"/>
              <path d="M 312,128 L 512,128" fill="none" stroke="black"/>
              <path d="M 256,160 L 288,160" fill="none" stroke="black"/>
              <path d="M 312,160 L 512,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="296,160 284,154.4 284,165.6" fill="black" transform="rotate(0,288,160)"/>
              <polygon class="arrowhead" points="296,32 284,26.4 284,37.6" fill="black" transform="rotate(0,288,32)"/>
              <g class="text">
                <text x="16" y="36">New</text>
                <text x="92" y="36">bi-directional</text>
                <text x="172" y="36">QUIC</text>
                <text x="220" y="36">stream</text>
                <text x="352" y="52">HEADERS</text>
                <text x="424" y="52">(headers)</text>
                <text x="328" y="84">[</text>
                <text x="356" y="84">DATA</text>
                <text x="392" y="84">...</text>
                <text x="416" y="84">]</text>
                <text x="372" y="116">UNBOUND_DATA</text>
                <text x="336" y="148">Raw</text>
                <text x="380" y="148">octets</text>
                <text x="432" y="148">(data</text>
                <text x="480" y="148">only)</text>
                <text x="196" y="164">QUIC</text>
                <text x="232" y="164">FIN</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  New bi-directional QUIC stream ---->  +------------------------+
                                        | HEADERS (headers)      |
                                        +------------------------+
                                        | [ DATA ... ]           |
                                        +------------------------+
                                        | UNBOUND_DATA           |
                                        +------------------------+
                                        | Raw octets (data only) |
                        QUIC FIN ---->  +------------------------+
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The introduction of <tt>UNBOUND_DATA</tt> does not alter the security properties of HTTP/3 or QUIC. It only changes how the CONNECT payload is framed on request and response streams.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http3-setting">
        <name>HTTP/3 Setting</name>
        <t>This specification registers the following entry in the "HTTP/3 Settings" registry defined in <xref target="H3"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Value: 0x282cf6bb</t>
          </li>
          <li>
            <t>Setting Name: SETTINGS_ENABLE_UNBOUND_DATA</t>
          </li>
          <li>
            <t>Default: 0</t>
          </li>
          <li>
            <t>Status: provisional (permanent if this document is approved)</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
          <li>
            <t>Change Controller: Yaroslav Rosomakho (IETF if this document is approved)</t>
          </li>
          <li>
            <t>Contact: yrosomakho@zscaler.com (HTTP_WG; HTTP working group; ietf-http-wg@w3.org if this document is approved)</t>
          </li>
          <li>
            <t>Notes: None</t>
          </li>
        </ul>
      </section>
      <section anchor="http3-frame-type">
        <name>HTTP/3 Frame Type</name>
        <t>This specification registers the following entry in the "HTTP/3 Frame Types" registry defined in <xref target="H3"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Value: 0x2a937388</t>
          </li>
          <li>
            <t>Frame Type: UNBOUND_DATA</t>
          </li>
          <li>
            <t>Status: provisional (permanent if this document is approved)</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
          <li>
            <t>Change Controller: Yaroslav Rosomakho (IETF if this document is approved)</t>
          </li>
          <li>
            <t>Contact: yrosomakho@zscaler.com (HTTP_WG; HTTP working group; ietf-http-wg@w3.org if this document is approved)</t>
          </li>
          <li>
            <t>Notes: None</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="H3" to="HTTP/3"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CONNECT-TCP">
          <front>
            <title>Template-Driven HTTP CONNECT Proxying for TCP</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <date day="17" month="August" year="2026"/>
            <abstract>
              <t>   TCP proxying using HTTP CONNECT has long been part of the core HTTP
   specification.  However, this proxying functionality has several
   important deficiencies in modern HTTP environments.  This
   specification defines an alternative HTTP proxy service configuration
   for TCP connections.  This configuration is described by a URI
   Template, similar to the CONNECT-UDP and CONNECT-IP protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-13"/>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="CONNECT-ETHERNET">
          <front>
            <title>Proxying Ethernet Frames in HTTP</title>
            <author fullname="Alejandro Sedeño" initials="A." surname="Sedeño">
              <organization>Google LLC</organization>
            </author>
            <date day="18" month="August" year="2026"/>
            <abstract>
              <t>   This document describes how to proxy Ethernet frames in HTTP.  This
   protocol is similar to IP proxying in HTTP, but for Layer 2 instead
   of Layer 3.  More specifically, this document defines a protocol that
   allows an HTTP client to create a tunnel to exchange Layer 2 Ethernet
   frames through an HTTP server with an attached physical or virtual
   Ethernet segment.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ethernet-14"/>
        </reference>
        <reference anchor="WebSockets">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   WebTransport over HTTP/3 is a binding of the WebTransport protocol
   framework [OVERVIEW] to HTTP/3 [HTTP3].  It provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.  WebTransport enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-16"/>
        </reference>
      </references>
    </references>
    <?line 193?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This specification originated from discussions with Christian Huitema and Alan Frindell, whose ideas and feedback helped shape the approach described in this document. The authors also thank Lucas Pardue for providing valuable initial feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
