<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-httpbis-h3-unbound-data-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-01"/>
    <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="February" 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="5" month="December" year="2025"/>
            <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-10"/>
        </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 in HTTP</title>
            <author fullname="Alejandro Sedeño" initials="A." surname="Sedeño">
              <organization>Google LLC</organization>
            </author>
            <date day="10" month="October" year="2025"/>
            <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-08"/>
        </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>Facebook</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="20" month="October" year="2025"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.  This document describes a WebTransport
   protocol that is based on HTTP/3 [HTTP3] and provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-14"/>
        </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>
