<?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.6.17 (Ruby 2.6.4) -->
<?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-01"
      ipr="trust200902"
      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 year="2022" month="October" day="5"/>
      <area>Applications</area>
      <workgroup>HTTPbis</workgroup>
      <keyword>Internet-Draft</keyword>
      <abstract>
         <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
      </abstract>
   </front>
   <middle>
      <section anchor="problems">
         <name>Introduction</name>
         <t>Existing RFCs define extensions to HTTP/2 <xref target="HTTP2"/> which remain useful in HTTP/3. <xref section="A.2.3" sectionFormat="of" target="HTTP3"/> 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>
      <section anchor="frame-origin">
         <name>The ORIGIN HTTP/3 Frame</name>
         <t>The ORIGIN HTTP/3 frame allows a server to indicate what origin(s) (<xref target="RFC6454"/>) the server would like the client to consider as 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. Where <xref target="ORIGIN"/> indicates that the ORIGIN frame should be sent on Stream 0, this should be interpreted to mean the HTTP/3 control stream. The ORIGIN frame is sent from servers to clients on the server's control stream.</t>
         <section anchor="frame-layout">
            <name>Frame Layout</name>
            <t>The ORIGIN frame has a nearly identical layout to that used in HTTP/2, restated here for clarity. The ORIGIN frame type is 0xc (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 OPTIONAL 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="HTTP3"/>.</t>
      </section>
      <section anchor="iana">
         <name>IANA Considerations</name>
         <t>This document registers a frame type in the "HTTP/3 Frame Type" registry (<xref target="HTTP3"/>).</t>
         <texttable anchor="iana-frame-table" title="Registered HTTP/3 Frame Types">
            <ttcol align="left">Frame Type</ttcol>
            <ttcol align="center">Value</ttcol>
            <ttcol align="left">Specification</ttcol>
            <c>ORIGIN</c>
            <c>0xc</c>
            <c>
               <xref target="frame-origin"/>
            </c>
         </texttable>
      </section>
   </middle>
   <back>
      <references title="Normative References">
         <reference anchor="HTTP2">
            <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="HTTP3">
            <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>
      </references>
      <references title="Informative References">
         <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>
   </back>
</rfc>
