<?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.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-origin-h3-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="ORIGIN in HTTP/3">The ORIGIN Extension in HTTP/3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-origin-h3-02"/>
    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <date/>
    <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>
      <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 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>
          <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 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>
      <table anchor="iana-frame-table">
        <name>Registered HTTP/3 Frame Types</name>
        <thead>
          <tr>
            <th align="left">Frame Type</th>
            <th align="center">Value</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ORIGIN</td>
            <td align="center">0xc</td>
            <td align="left">
              <xref target="frame-origin"/></td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </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">
              <organization/>
            </author>
            <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="ORIGIN">
          <front>
            <title>The ORIGIN HTTP/2 Frame</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="E. Nygren" initials="E." surname="Nygren">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8336"/>
          <seriesInfo name="DOI" value="10.17487/RFC8336"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6454">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
TuX+frcm06O8ey58VjGX1Z34D10gA7xyDQAA

-->

</rfc>
