<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.2) -->
<?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-origin-h3-latest"
     ipr="trust200902"
     number="9412"
     sortRefs="true"
     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 abbrev="ORIGIN in HTTP/3">The ORIGIN Extension in HTTP/3</title>
      <author fullname="Mike Bishop" initials="M." surname="Bishop">
         <organization>Akamai</organization>
         <address>
            <email>mbishop@evequefou.be</email>
         </address>
      </author>
      <date month="June" year="2023"/>
      <area>Applications and Real-Time</area>
      <workgroup>HTTPbis</workgroup>
      <keyword>Internet-Draft</keyword>
      <abstract><?line 35?>
         <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but it needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
      </abstract>
   </front>
   <middle><?line 41?>
      <section anchor="problems">
         <name>Introduction</name>
         <t>Existing RFCs define extensions to HTTP/2 <xref target="RFC9113"/> that remain useful in HTTP/3. <xref section="A.2" sectionFormat="of" target="RFC9114"/> describes the required updates for HTTP/2 frames to be used with HTTP/3.</t>
         <t>
            <xref target="ORIGIN"/> defines the HTTP/2 ORIGIN frame, which indicates what origins are available on a given connection. It defines a single HTTP/2 frame type.</t>
         <section anchor="notational-conventions">
            <name>Notational Conventions</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?>
            <t>The frame diagram in this document uses the format defined in <xref section="1.3" sectionFormat="of" target="QUIC-TRANSPORT"/> to illustrate the order and size of fields.</t>
         </section>
      </section>
      <section anchor="frame-origin">
         <name>The ORIGIN HTTP/3 Frame</name>
         <t>The ORIGIN HTTP/3 frame allows a server to indicate what origin or origins <xref target="RFC6454"/> the server would like the client to consider as one or more members of the Origin Set (<xref section="2.3" sectionFormat="of" target="ORIGIN"/>) for the connection within which it occurs.</t>
         <t>The semantics of the frame payload are identical to those of the HTTP/2 frame defined in <xref target="ORIGIN"/>. Where HTTP/2 reserves stream 0 for frames related to the state of the connection, HTTP/3 defines a pair of unidirectional streams called "control streams" for this purpose.</t>
         <t>Where <xref target="ORIGIN"/> indicates that the ORIGIN frame is sent on stream 0, this should be interpreted to mean the HTTP/3 control stream: that is, the ORIGIN frame is sent from servers to clients on the server's control stream.</t>
         <t>HTTP/3 does not define a Flags field in the generic frame layout. As no flags have been defined for the ORIGIN frame, this specification does not define a mechanism for communicating such flags in HTTP/3.</t>
         <section anchor="frame-layout">
            <name>Frame Layout</name>
            <t>The ORIGIN frame has a layout that is nearly identical to the layout used in HTTP/2; the information is restated here for clarity. The ORIGIN frame type is 0x0c (decimal 12), as in HTTP/2. The payload contains zero or more instances of the Origin-Entry field.</t>
            <figure title="ORIGIN Frame Layout">
               <artwork type="ascii-art">
HTTP/3 Origin-Entry {
  Origin-Len (16),
  ASCII-Origin (..),
}

HTTP/3 ORIGIN Frame {
  Type (i) = 0x0c,
  Length (i),
  Origin-Entry (..) ...,
}
</artwork>
            </figure>
            <t>An Origin-Entry is a length-delimited string. Specifically, it contains two fields:</t>
            <dl>
               <dt>Origin-Len:</dt>
               <dd>
                  <t>An unsigned, 16-bit integer indicating the length, in octets, of the ASCII-Origin field.</t>
               </dd>
               <dt>ASCII-Origin:</dt>
               <dd>
                  <t>An <bcp14>OPTIONAL</bcp14> sequence of characters containing the ASCII serialization of an origin (<xref section="6.2" sectionFormat="comma" target="RFC6454"/>) that the sender asserts this connection is or could be authoritative for.</t>
               </dd>
            </dl>
         </section>
      </section>
      <section anchor="security">
         <name>Security Considerations</name>
         <t>This document introduces no new security considerations beyond those discussed in <xref target="ORIGIN"/> and <xref target="RFC9114"/>.</t>
      </section>
      <section anchor="iana">
         <name>IANA Considerations</name>
         <t>This document registers a frame type in the "HTTP/3 Frame Types" registry defined by <xref target="RFC9114"/>, located at &lt;https://www.iana.org/assignments/http3-parameters/&gt;.</t>
         <dl>
            <dt>Value:</dt>
            <dd>
               <t>0x0c</t>
            </dd>
            <dt>Frame Type:</dt>
            <dd>
               <t>ORIGIN</t>
            </dd>
            <dt>Status:</dt>
            <dd>
               <t>permanent</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
               <t>
                  <xref target="frame-origin"/>
               </t>
            </dd>
            <dt>Date:</dt>
            <dd>
               <t>2023-03-14</t>
            </dd>
            <dt>Change Controller:</dt>
            <dd>
               <t>IETF</t>
            </dd>
            <dt>Contact:</dt>
            <dd>
               <t>HTTP WG &lt;ietf-http-wg@w3.org&gt;</t>
            </dd>
         </dl>
      </section>
   </middle>
   <back>
      <displayreference target="RFC9113" to="HTTP/2"/>
      <displayreference target="RFC9114" to="HTTP/3"/>
      <references anchor="sec-combined-references" title="References">
         <references anchor="sec-normative-references" title="Normative References">
            <reference anchor="RFC9113">
               <front>
                  <title>HTTP/2</title>
                  <author fullname="M. Thomson"
                          initials="M."
                          role="editor"
                          surname="Thomson"/>
                  <author fullname="C. Benfield"
                          initials="C."
                          role="editor"
                          surname="Benfield"/>
                  <date month="June" year="2022"/>
               </front>
               <seriesInfo name="RFC" value="9113"/>
               <seriesInfo name="DOI" value="10.17487/RFC9113"/>
            </reference>
            <reference anchor="RFC9114">
               <front>
                  <title>HTTP/3</title>
                  <author fullname="M. Bishop"
                          initials="M."
                          role="editor"
                          surname="Bishop"/>
                  <date month="June" year="2022"/>
               </front>
               <seriesInfo name="RFC" value="9114"/>
               <seriesInfo name="DOI" value="10.17487/RFC9114"/>
            </reference>
            <reference anchor="ORIGIN">
               <front>
                  <title>The ORIGIN HTTP/2 Frame</title>
                  <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
                  <author fullname="E. Nygren" initials="E." surname="Nygren"/>
                  <date month="March" year="2018"/>
               </front>
               <seriesInfo name="RFC" value="8336"/>
               <seriesInfo name="DOI" value="10.17487/RFC8336"/>
            </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>
         </references>
         <references anchor="sec-informative-references" title="Informative References">
            <reference anchor="QUIC-TRANSPORT">
               <front>
                  <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
                  <author fullname="J. Iyengar"
                          initials="J."
                          role="editor"
                          surname="Iyengar"/>
                  <author fullname="M. Thomson"
                          initials="M."
                          role="editor"
                          surname="Thomson"/>
                  <date month="May" year="2021"/>
               </front>
               <seriesInfo name="RFC" value="9000"/>
               <seriesInfo name="DOI" value="10.17487/RFC9000"/>
            </reference>
            <reference anchor="RFC6454">
               <front>
                  <title>The Web Origin Concept</title>
                  <author fullname="A. Barth" initials="A." surname="Barth"/>
                  <date month="December" year="2011"/>
               </front>
               <seriesInfo name="RFC" value="6454"/>
               <seriesInfo name="DOI" value="10.17487/RFC6454"/>
            </reference>
         </references>
      </references>
   </back>
</rfc>
