<?xml version="1.0" encoding="UTF-8"?>

<!-- draft submitted in xml v3 -->

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.19 (Ruby 3.1.3) -->

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-origin-h3-03" number="9412" submissionType="IETF" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true"
updates="" obsoletes="" xml:lang="en" version="3">

  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title abbrev="ORIGIN in HTTP/3">The ORIGIN Extension in HTTP/3</title>
    <seriesInfo name="RFC" value="9412"/>
    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <date year="2023" month="June" />
    
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <abstract>
      <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>
    <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="RFC8336"/> 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&nbsp;14
        <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.</t>
        <t>The frame diagram in this document uses the format defined in <xref section="1.3" sectionFormat="of" target="RFC9000"/> 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="RFC8336"/>) 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="RFC8336"/>. 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="RFC8336"/> 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>
          <name>ORIGIN Frame Layout</name>
          <artwork type="ascii-art"><![CDATA[
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="RFC8336"/> 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 <eref target="https://www.iana.org/assignments/http3-parameters/" brackets="angle"/>.</t>

<dl spacing="compact"><dt>Value:</dt><dd>0x0c</dd>
<dt>Frame Type:</dt><dd>ORIGIN</dd>
<dt>Status:</dt><dd>permanent</dd>
<dt>Reference:</dt><dd><xref target="frame-origin"/></dd>
<dt>Date:</dt><dd>2023-03-14</dd>
<dt>Change Controller:</dt><dd>IETF</dd>
<dt>Contact:</dt><dd>HTTP WG &lt;ietf-http-wg@w3.org&gt;</dd>
</dl>
    </section>
  </middle>
  <back>

    <displayreference target="RFC9113" to="HTTP/2"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <displayreference target="RFC8336" to="ORIGIN"/>
    <displayreference target="RFC9000" to="QUIC-TRANSPORT"/>
    
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9113.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9114.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8336.xml"/>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>

      </references>
      <references>
        <name>Informative References</name>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6454.xml"/>

      </references>
    </references>
  </back>
</rfc>
