<?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.7.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-chunked-ohttp-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Chunked OHTTP">Chunked Oblivious HTTP Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-chunked-ohttp-03"/>
    <author fullname="Tommy Pauly">
      <organization>Apple</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2024" month="December" day="10"/>
    <area>ART</area>
    <workgroup>OHAI Working Group</workgroup>
    <abstract>
      <?line 32?>

<t>This document defines a variant of the Oblivious HTTP message format that allows
chunks of requests and responses to be encrypted and decrypted before the entire
request or response is processed. This allows incremental processing of Oblivious
HTTP messages, which is particularly useful for handling large messages or systems
that process messages slowly.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ohai.github.io/draft-ohai-chunked-ohttp/draft-ietf-ohai-chunked-ohttp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ohai-chunked-ohttp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OHAI Working Group mailing list (<eref target="mailto:ohai@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ohai/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ohai/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-ohai/draft-ohai-chunked-ohttp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 40?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Oblivious HTTP <xref target="OHTTP"/> defines a system for sending HTTP requests
and responses as encrypted messages. Clients send requests via a relay to a gateway, which
is able to decrypt and forward the request to a target server. Responses are encrypted
with an ephemeral symmetric key by the gateway and sent back to the client via the relay.
The messages are protected with Hybrid Public Key Encryption (HPKE; <xref target="HPKE"/>),
and are intended to prevent the gateway from linking any two independent requests to the
same client.</t>
      <t>The definition of Oblivious HTTP in <xref target="OHTTP"/> encrypts messages such that entire request
and response bodies need to be received before any of the content can be decrypted. This
is well-suited for many of the use cases of Oblivious HTTP, such as DNS queries or metrics
reporting.</t>
      <t>However, some applications of Oblivious HTTP can benefit from being able to encrypt and
decrypt parts of the messages in chunks. If a request or response can be processed by a
receiver in separate parts, and is particularly large or will be generated slowly, then
sending a series of encrypted chunks can improve the performance of applications.</t>
      <t>Incremental delivery of responses allows an Oblivious Gateway Resource to provide
Informational (1xx) responses (<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
      <t>This document defines an optional message format for Oblivious HTTP that supports the
progressive creation and processing of both requests and responses. New media types are
defined for this purpose.</t>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Like the non-chunked variant, chunked Oblivious HTTP has limited applicability
as described in <xref section="2.1" sectionFormat="of" target="OHTTP"/>, and requires the use of a willing
Oblivious Relay Resource and Oblivious Gateway Resource.</t>
        <t>Chunked Oblivious HTTP is intended to be used in cases for where the privacy
properties of Oblivious HTTP are needed — specifically, removing linkage
at the transport layer between separate HTTP requests — but incremental
processing is also needed for performance or functionality.</t>
        <t>One specific functional capability that requires chunked Oblivious HTTP
is support for Informational (1xx) responses
(<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
        <t>In order to be useful, the content of chunked Oblivious HTTP needs to be
possible to process incrementally. Since incremental processing means that the
message might end up being truncated, for example in the case of an error on the
underlying transport, applications also need to be prepared to safely handle incomplete
messages (see <xref target="security"/> for more discussion). Applications that use the Indeterminate
format of Binary HTTP (<xref section="3.2" sectionFormat="of" target="BHTTP"/>) are well-suited
to using chunked Oblivious HTTP.</t>
        <t>Chunked Oblivious HTTP is not intended to be used for long-lived sessions
between clients and servers that might build up state, or as a replacement
for a proxied TLS session.</t>
      </section>
    </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>
      <?line -18?>

<t>Notational conventions from <xref target="OHTTP"/> are used in this document.</t>
    </section>
    <section anchor="chunked-requests-and-responses">
      <name>Chunked Requests and Responses</name>
      <t>Chunked Oblivious HTTP defines different media than the non-chunked variant. These
media types are "message/ohttp-chunked-req" (defined in <xref target="iana-req"/>) and
"message/ohttp-chunked-res" (defined in <xref target="iana-res"/>). If a request uses the
media type "message/ohttp-chunked-req", a successful corresponding response
<bcp14>MUST</bcp14> use the media type "message/ohttp-chunked-res".</t>
      <t>Use cases that require the use of Chunked OHTTP <bcp14>SHOULD</bcp14> only use the chunked
media types for their requests, to indicate that Chunked OHTTP is required.
If the gateway unexpectedly does not support Chunked OHTTP, then the request
will fail as if OHTTP as a whole were not supported. If clients retry requests
with the non-chunked media type, a gateway could partition client anonymity
sets by rejecting some requests and accepting others.</t>
      <t>Chunked OHTTP requests and responses <bcp14>SHOULD</bcp14> include the
<tt>Incremental</tt> header field <xref target="INCREMENTAL"/>
in order to signal to intermediaries (such as the relay) that the content of
the messages are intended to be delivered incrementally. Without this signal,
intermediaries might buffer request or response body until complete, removing
the benefits of using Chunked OHTTP.</t>
      <t>Chunked OHTTP messages generally will not include a <tt>Content-Length</tt> header field,
since the complete length of all chunks might not be known ahead of time.</t>
      <t>For example, a Chunked OHTTP request could look like the following:</t>
      <sourcecode type="http-message"><![CDATA[
POST /request.example.net/proxy HTTP/1.1
Host: proxy.example.org
Content-Type: message/ohttp-chunked-req
Incremental: ?1

<content is an Encapsulated Request>
]]></sourcecode>
      <t>Implementations <bcp14>MUST</bcp14> support receiving chunks that contain <tt>2^14</tt> (16384) octets
of data prior to encapsulation. Senders of chunks <bcp14>SHOULD</bcp14> limit their chunks to
this size, unless they are aware of support for larger sizes by the receiving
party.</t>
    </section>
    <section anchor="request">
      <name>Request Format</name>
      <t>Chunked OHTTP requests start with the same header as used for the non-chunked variant,
which consists of a key ID, algorithm IDs, and the KEM shared secret. This header is
followed by chunks of data protected with HPKE, each of which is preceded by a
variable-length integer (as defined in <xref section="16" sectionFormat="of" target="QUIC"/>)
that indicates the length of the chunk. The final chunk is preceded by a length
field with the value 0, which means the chunk extends to the end of the outer stream.</t>
      <figure anchor="fig-enc-request">
        <name>Chunked Encapsulated Request Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Request {
  Chunked Request Header (56 + 8 * Nenc),
  Chunked Request Chunks (..),
}

Chunked Request Header {
  Key Identifier (8),
  HPKE KEM ID (16),
  HPKE KDF ID (16),
  HPKE AEAD ID (16),
  Encapsulated KEM Shared Secret (8 * Nenc),
}

Chunked Request Chunks {
  Non-Final Request Chunk (..),
  Final Request Chunk Indicator (i) = 0,
  HPKE-Protected Final Chunk (..),
}

Non-Final Request Chunk {
  Length (i) = 1..,
  HPKE-Protected Chunk (..),
}
]]></artwork>
      </figure>
      <t>The content of the HPKE-protected chunks is defined in <xref target="request-encap"/>.</t>
    </section>
    <section anchor="response">
      <name>Response Format</name>
      <t>Chunked OHTTP responses start with a nonce, followed by chunks of data protected with
an AEAD. Each chunk is preceded by a variable-length integer that indicates the length
of the chunk. The final chunk is preceded by a length field with the value 0, which means
the chunk extends to the end of the outer stream.</t>
      <figure anchor="fig-enc-response">
        <name>Chunked Encapsulated Response Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Response {
  Response Nonce (Nk),
  Chunked Response Chunks (..),
}

Chunked Response Chunks {
  Non-Final Response Chunk (..),
  Final Response Chunk Indicator (i) = 0,
  AEAD-Protected Final Response Chunk (..),
}

Non-Final Response Chunk {
  Length (i) = 1..,
  AEAD-Protected Chunk (..),
}
]]></artwork>
      </figure>
    </section>
    <section anchor="encapsulation-of-chunks">
      <name>Encapsulation of Chunks</name>
      <t>The encapsulation of chunked Oblivious HTTP requests and responses uses
the same approach as the non-chunked variant, with the difference that
the body of requests and responses are sealed and opened in chunks, instead
of as a whole.</t>
      <t>The AEAD that protects both requests and responses protects individual chunks from
modification or truncation. Additionally, chunk authentication protects two other
pieces of information:</t>
      <ol spacing="normal" type="1"><li>
          <t>the order of the chunks (the sequence number of each chunk), which is
included in the nonce of each chunk.</t>
        </li>
        <li>
          <t>which chunk is the final chunk, which is indicated by a sentinel in the AAD
of the final chunk.</t>
        </li>
      </ol>
      <t>The format of the outer packaging that carries the chunks (the length prefix for each
chunk specifically) is not explicitly authenticated. This allows the chunks to be
transported by alternative means, and still be valid as long as the order and
finality are preserved.  In particular, the variable-length encoding used for lengths
allows for different expressions of the same value, where the choice between
equivalent encodings is not authenticated.</t>
      <section anchor="request-encap">
        <name>Request Encapsulation</name>
        <t>For requests, the setup of the HPKE context and the encrypted request header
is the same as the non-chunked variant. This is the Chunked Request Header
defined in <xref target="request"/>.</t>
        <artwork><![CDATA[
hdr = concat(encode(1, key_id),
             encode(2, kem_id),
             encode(2, kdf_id),
             encode(2, aead_id))
info = concat(encode_str("message/bhttp chunked request"),
              encode(1, 0),
              hdr)
enc, sctxt = SetupBaseS(pkR, info)
enc_request_hdr = concat(hdr, enc)
]]></artwork>
        <t>Each chunk is sealed using the HPKE context. For non-final chunks, the AAD
is empty.</t>
        <artwork><![CDATA[
sealed_chunk = sctxt.Seal("", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
]]></artwork>
        <t>The final chunk in a request uses an AAD of the string "final" and is prefixed
with a zero length.</t>
        <artwork><![CDATA[
sealed_final_chunk = sctxt.Seal("final", chunk)
final_chunk = concat(varint_encode(0), sealed_final_chunk)
]]></artwork>
        <t>HPKE already maintains a sequence number for sealing operations as part of
the context, so the order of chunks is protected. HPKE will produce an
error if the sequence number overflows, which puts a limit on the number
of chunks that can be sent in a request.</t>
      </section>
      <section anchor="response-encap">
        <name>Response Encapsulation</name>
        <t>For responses, the first piece of data sent back is the response nonce,
as in the non-chunked variant. As in the non-chunked variant, the length
of the nonce is <tt>max(Nn, Nk)</tt>, where <tt>Nn</tt> and <tt>Nk</tt> are the length of
the AEAD nonce and key.</t>
        <artwork><![CDATA[
entropy_len = max(Nn, Nk)
response_nonce = random(entropy_len)
]]></artwork>
        <t>Each chunk is sealed using the same AEAD key and AEAD nonce that are
derived for the non-chunked variant, which are calculated as follows:</t>
        <artwork><![CDATA[
secret = context.Export("message/bhttp chunked response", entropy_len)
salt = concat(enc, response_nonce)
prk = Extract(salt, secret)
aead_key = Expand(prk, "key", Nk)
aead_nonce = Expand(prk, "nonce", Nn)
]]></artwork>
        <t>The sender also maintains a counter of chunks, which is set to 0 for the first
chunk an incremented by 1 after encoding each chunk.</t>
        <artwork><![CDATA[
counter = 0
]]></artwork>
        <t>The AEAD nonce is XORed with the counter for encrypting (and decrypting) each
chunk.  For non-final chunks, the AAD is empty.</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_chunk = Seal(aead_key, chunk_nonce, "", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
counter++
]]></artwork>
        <t>The final chunk in a response uses an AAD of the string "final" and is prefixed
with a zero length.</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_final_chunk = Seal(aead_key, chunk_nonce, "final", chunk)
final_chunk = concat(varint_encode(0), sealed_final_chunk)
]]></artwork>
        <t>If the counter reached the maximum value that can be held in an
integer with <tt>Nn</tt> bits (that maximum being <tt>2^Nn</tt>), where <tt>Nn</tt> is the
length of the AEAD nonce, the <tt>chunk_nonce</tt> would wrap and be reused.
Therefore, the response <bcp14>MUST NOT</bcp14> use <tt>2^Nn</tt> or more chunks.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In general, Chunked OHTTP inherits the same security considerations as Oblivious
HTTP <xref target="OHTTP"/>. Note specifically that while Chunked OHTTP allows for incremental
delivery and processing of messages, it does not add forward secrecy between
chunks. As with the non-chunked variant, forward secrecy is only provided when
changing the key configuration. This is particularly important when chunking is
used to enable interactivity.</t>
      <t>The use of Chunked OHTTP can be considered part of the configuration a client
knows about for a particular gateway. As such, the use of Chunked OHTTP falls
under the same consistency privacy considerations as the rest of the configuration
(see <xref section="7" sectionFormat="of" target="OHTTP"/>). Specifically, clients <bcp14>SHOULD NOT</bcp14> fall back from
Chunked OHTTP to the non-chunked variant if they are configured to used chunking.
Falling back would allow clients to have inconsistent behavior that could be used to partition client anonymity sets.</t>
      <section anchor="message-truncation">
        <name>Message Truncation</name>
        <t>The primary advantage of a chunked encoding is that chunked requests or responses can
be generated or processed incrementally.  However, for a recipient in particular,
processing an incomplete message can have security consequences.</t>
        <t>The potential for message truncation is not a new concern for HTTP.  All versions of
HTTP provide incremental delivery of messages.  For this use of Oblivious HTTP,
incremental processing that might result in side-effects demands particular attention
as Oblivious HTTP does not provide strong protection against replay attacks; see
<xref section="6.5" sectionFormat="of" target="OHTTP"/>.  Truncation might be the result of interference at the
network layer, or by a malicious Oblivious Relay Resource.</t>
        <t>Endpoints that receive chunked messages can perform early processing if the risks are
understood and accepted. Conversely, endpoints that depend on having a complete
message <bcp14>MUST</bcp14> ensure that they do not consider a message complete until having
received a chunk with a 0-valued length prefix, which was successfully decrypted
using the expected sentinel value, "final", in the AAD.</t>
      </section>
      <section anchor="interactivity-and-privacy">
        <name>Interactivity and Privacy</name>
        <t>Without chunking, Oblivious HTTP involves a single request and response, with no
further interactivity.  Using a chunked variant at both Client and Oblivious
Gateway Resource creates the possibility that an exchange could lead to multiple
rounds of interaction.  Information from early chunks from a peer could
influence how an endpoint constructs later chunks of their message.  However,
the use of Chunked OHTTP does not necessarily mean that exchanges will involve
interactivity.</t>
        <t>Interactivity for Chunked OHTTP can be defined as any case in which the response
can influence the timing or content of the request. To help explain this
distinction, the following scenarios can be used to understand different
modalities for requests and responses:</t>
        <ul spacing="normal">
          <li>
            <t>The request is sent as a single chunk, and the response is sent as a single
chunk. This is a non-interactive case that is identical to the non-chunked
variant.</t>
          </li>
          <li>
            <t>The request is sent as a single chunk, and the response is sent in multiple
chunks. This is a non-interactive case, because there is no possibility
that the client can influence its request based on the response content.</t>
          </li>
          <li>
            <t>The request is sent in multiple chunks, but either all chunks are sent before
a response chunk is received, or the sending of the chunks is not influenced
by the response chunks. This is a non-interactive case, since again the
client's request is not influenced by any response content.</t>
          </li>
          <li>
            <t>The request is sent in multiple chunks, at least one of which specifically
is sent after receiving -- and possibly processing -- a response chunk (or the complete response), where
the response influences the timing and/or content of the request chunk.
This is an interactive case.</t>
          </li>
        </ul>
        <t>In the interactive case, the Oblivious Gateway Resource can
observe the round trip time to the Client, which can change the privacy
assumptions of the system. Client implementations therefore need to be aware
of the possibility that interactively processing chunks might reveal information to the
Oblivious Gateway Resource that is otherwise kept private.</t>
        <t>For cases when interactivity introduces unacceptable risks, the client can ensure that it never has an
interactive exchange, either by not sending its request in multiple chunks, or
by ensuring that the sending of request chunks cannot be influenced by the response.</t>
        <t>Interactivity that is deliberate might be acceptable. For instance, the
100-continue feature in HTTP, which has the client withhold the body of a
request until it receives a 100 Informational response, is not possible without
an interactive exchange.  This highlights the risks involved in the use of this
chunked encoding to adapt an existing HTTP-based interaction to use Oblivious HTTP
as such an adaptation might not achieve expected privacy outcomes.</t>
        <t>Interactivity does not inherently reduce replay risk unless the server
explicitly verifies that a client is live (such as by having the client echo
content from the response in its request).  A request that is generated
interactively can be replayed by a malicious relay.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the "Media Types" registry at
<eref target="https://iana.org/assignments/media-types">https://iana.org/assignments/media-types</eref> to add the media types
"message/ohttp-chunked-req" (<xref target="iana-req"/>), and
"message/ohttp-chunked-res" (<xref target="iana-res"/>), following the procedures of
<xref target="RFC6838"/>.</t>
      <section anchor="iana-req">
        <name>message/ohttp-chunked-req Media Type</name>
        <t>The "message/ohttp-chunked-req" identifies an encrypted binary HTTP request
that is transmitted or processed in chunks. This is a binary format that is
defined in <xref target="request"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-req</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP requests that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-res">
        <name>message/ohttp-chunked-res Media Type</name>
        <t>The "message/ohttp-chunked-res" identifies an encrypted binary HTTP response
that is transmitted or processed in chunks. This is a binary format that
is defined in <xref target="response"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-res</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP responses that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="BHTTP">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </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"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </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"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="INCREMENTAL">
          <front>
            <title>Incremental HTTP Messages</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="15" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies the "Incremental" HTTP header field, which
   instructs HTTP intermediaries to forward the HTTP message
   incrementally.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the HTTP Working Group
   mailing list (ietf-http-wg@w3.org), which is archived at
   https://lists.w3.org/Archives/Public/ietf-http-wg/.

   Source for this draft and an issue tracker can be found at
   https://github.com/kazuho/draft-kazuho-httpbis-incremental-http.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kazuho-httpbis-incremental-http-00"/>
        </reference>
        <reference anchor="QUIC">
          <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"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 593?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledgements.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
HYR8438BNr+Fj5xQAAA=

-->

</rfc>
