<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.21 -->
<?rfc-ext html-pretty-print="prettyprint https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"?>
<rfc xmlns:x="http://purl.org/net/xml2rfc/ext"
     category="std"
     consensus="true"
     docName="draft-ietf-httpbis-h3-websockets-02"
     ipr="trust200902"
     sortRefs="true"
     submissionType="IETF"
     symRefs="true"
     tocInclude="true">
   <x:feedback template="mailto:ietf-http-wg@w3.org?subject={docname},%20%22{section}%22\&amp;amp;body=%3c{ref}%3e:"/>
   <front>
      <title>Bootstrapping WebSockets with HTTP/3</title>
      <author fullname="Ryan Hamilton" initials="R." surname="Hamilton">
         <organization>Google</organization>
         <address>
            <email>rch@google.com</email>
         </address>
      </author>
      <date day="12" month="January" year="2022"/>
      <area>ART</area>
      <workgroup>HTTP</workgroup>
      <keyword>Internet-Draft</keyword>
      <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>
      <note removeInRFC="true" title="About This Document">
         <t>Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-h3-websockets/"/>.</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/"/>. Working Group information can be found at <eref target="https://httpwg.org/"/>.</t>
         <t>Source for this draft and an issue tracker can be found at <eref target="https://github.com/httpwg/http-extensions/labels/h3-websockets"/>.</t>
      </note>
   </front>
   <middle>
      <section anchor="introduction">
         <name>Introduction</name>
         <t>
            <xref target="RFC8441"/> defines an extension to HTTP/2 which is also useful in HTTP/3. This extension makes use of an HTTP/2 setting. <xref section="A.3" sectionFormat="of" target="HTTP3"><?aug-anchor h2-settings?><?aug-title HTTP/2 SETTINGS Parameters?></xref> describes the required updates for HTTP/2 settings to be used with HTTP/3.</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>
      </section>
      <section anchor="websockets-upgrade-over-http3">
         <name>Websockets Upgrade over HTTP/3</name>
         <t>
            <xref target="RFC8441"/> defines a mechanism for running the WebSocket Protocol <xref target="RFC6455"/> over a single stream of an HTTP/2 connection. It defines an Extended CONNECT method which specifies a new ":protocol" pseudo header field and new semantics for the ":path" and ":authority" pseudo header fields. It also defines a new HTTP/2 setting sent by a server to allow the client to use Extended CONNECT.</t>
         <t>The HTTP/3 stream closure is also analogous to the TCP connection closure of <xref target="RFC6455"/>. Orderly TCP-level closures are represented as a FIN bit on the stream (<xref section="4.2" sectionFormat="of" target="HTTP3"><?aug-anchor connect?><?aug-title The CONNECT Method?></xref>). RST exceptions are represented with an stream error (<xref section="8" sectionFormat="of" target="HTTP3"><?aug-anchor errors?><?aug-title Error Handling?></xref>) of type H3_REQUEST_CANCELLED (<xref section="8.1" sectionFormat="of" target="HTTP3"><?aug-anchor http-error-codes?><?aug-title HTTP/3 Error Codes?></xref>).</t>
         <t>The semantics of the headers and setting are identical to those in HTTP/2 as defined <xref target="RFC8441"/>. <xref section="A.3" sectionFormat="of" target="HTTP3"><?aug-anchor h2-settings?><?aug-title HTTP/2 SETTINGS Parameters?></xref> requires that HTTP/3 settings be registered separately for HTTP/3. The SETTINGS_ENABLE_CONNECT_PROTOCOL value is 0x08 (decimal 8), as in HTTP/2.</t>
         <t>If a server advertises support for Extended CONNECT but receives an Extended CONNECT request with a ":protocol" value that is unknown or is not supported, the server <bcp14>SHOULD</bcp14> respond to the request with a 501 (Not Implemented) status code (<xref section="15.6.2" sectionFormat="of" target="HTTP"/>). A server <bcp14>MAY</bcp14> provide more information via a Problem Details response <xref target="RFC7807"/>.</t>
      </section>
      <section anchor="security-considerations">
         <name>Security Considerations</name>
         <t>This document introduces no new security considerations beyond those discussed in <xref target="RFC8441"/>.</t>
      </section>
      <section anchor="iana-considerations">
         <name>IANA Considerations</name>
         <t>This document registers a new setting in the "HTTP/3 Settings" registry (<xref section="11.2.2" sectionFormat="of" target="HTTP3"><?aug-anchor iana-settings?><?aug-title Settings Parameters?></xref>).</t>
         <dl>
            <dt>Value:</dt>
            <dd>
               <t>0x08</t>
            </dd>
            <dt>Setting Name:</dt>
            <dd>
               <t>SETTINGS_ENABLE_CONNECT_PROTOCOL</t>
            </dd>
            <dt>Default:</dt>
            <dd>
               <t>0</t>
            </dd>
            <dt>Status:</dt>
            <dd>
               <t>permanent</t>
            </dd>
            <dt>Specification:</dt>
            <dd>
               <t>This Document</t>
            </dd>
            <dt>Date:</dt>
            <dd>
               <t>[ date of publication ]</t>
            </dd>
            <dt>Change Controller:</dt>
            <dd>
               <t>IETF</t>
            </dd>
            <dt>Contact:</dt>
            <dd>
               <t>HTTP Working Group (ietf-http-wg@w3.org)</t>
            </dd>
            <dt>Notes:</dt>
            <dd><!-- --></dd>
         </dl>
      </section>
   </middle>
   <back>
      <references title="Normative References">
         <reference anchor="HTTP3">
            <front>
               <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
               <author fullname="Mike Bishop" initials="M." surname="Bishop">
                  <organization>Akamai</organization>
               </author>
               <date day="2" month="February" year="2021"/>
            </front>
            <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
            <x:source basename="draft-ietf-quic-http-34" href="draft-ietf-quic-http-34.xml"/>
         </reference>
         <reference anchor="HTTP">
            <front>
               <title>HTTP Semantics</title>
               <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
                  <organization>Adobe</organization>
               </author>
               <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
                  <organization>Fastly</organization>
               </author>
               <author fullname="Julian Reschke" initials="J." surname="Reschke">
                  <organization>greenbytes GmbH</organization>
               </author>
               <date day="12" month="September" year="2021"/>
            </front>
            <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
         </reference>
         <reference anchor="RFC8441">
            <front>
               <title>Bootstrapping WebSockets with HTTP/2</title>
               <author fullname="P. McManus" initials="P." surname="McManus"/>
               <date month="September" year="2018"/>
            </front>
            <seriesInfo name="RFC" value="8441"/>
            <seriesInfo name="DOI" value="10.17487/RFC8441"/>
         </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"/>
            </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"/>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
         </reference>
         <reference anchor="RFC6455">
            <front>
               <title>The WebSocket Protocol</title>
               <author fullname="I. Fette" initials="I." surname="Fette"/>
               <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
               <date month="December" year="2011"/>
            </front>
            <seriesInfo name="RFC" value="6455"/>
            <seriesInfo name="DOI" value="10.17487/RFC6455"/>
         </reference>
         <reference anchor="RFC7807">
            <front>
               <title>Problem Details for HTTP APIs</title>
               <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
               <author fullname="E. Wilde" initials="E." surname="Wilde"/>
               <date month="March" year="2016"/>
            </front>
            <seriesInfo name="RFC" value="7807"/>
            <seriesInfo name="DOI" value="10.17487/RFC7807"/>
         </reference>
      </references>
      <section anchor="acknowledgments" numbered="false">
         <name>Acknowledgments</name>
         <t>TODO acknowledge.</t>
      </section>
   </back>
</rfc>
