<?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.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-ohai-consistency-doublecheck-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Key Consistency Double Check">Key Consistency for Oblivious HTTP by Double-Checking</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-ohai-consistency-doublecheck-02"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2022" month="July" day="01"/>
    <area>sec</area>
    <workgroup>ohai</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The assurances provided by Oblivious HTTP depend on the client's ability to verify that it is using the same Gateway, Target, and KeyConfig as many other users.  This specification defines a protocol to enable this verification.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schwartz-ohai-consistency-doublecheck/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bemasc/access-services"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Oblivious HTTP <xref target="I-D.ietf-ohai-ohttp"/> identifies four parties to each exchange: the Client, Relay, Gateway and Target.  When used properly, Oblivious HTTP enables the Client to send requests to the Target in such a way that the Target and Gateway cannot tell whether two requests came from the same Client, and the Relay cannot see the contents of the requests.</t>
      <t>The Target and Gateway are tightly coupled, as the Gateway can see and modify all cleartext data to and from the Target.  For ease of description, we will refer to the Target and Gateway collectively (including the URI and KeyConfig for the Gateway and the URI of the Target) as the "Service".</t>
      <t>Oblivious HTTP's threat model assumes that at least one of the Relay and the Service is acting properly, i.e. complying with the protocol and keeping certain information confidential.  If either Relay or Service misbehaves, the only effect must be a denial of service.</t>
      <t>In order for these security guarantees to hold, several preconditions must be met:</t>
      <ol spacing="normal" type="1"><li>The Client must be one of many users who might be using the Relay.  Otherwise, use of the Relay reveals the user's identity to the Gateway.</li>
        <li>The Client must hold an authentic KeyConfig for the Gateway.  Otherwise, the Client could be speaking to the Relay, impersonating the Gateway.</li>
        <li>All users of the Relay must be equally likely to use this Service, regardless of their prior activity.  Otherwise, the encrypted request identifies the Client to the Service.</li>
        <li>(optional) The Gateway must not learn the IP addresses of the Clients, collectively.  Otherwise, the Gateway might be able to deanonymize requests by correlating them with external information about the Clients.</li>
      </ol>
      <t>This specification defines behaviors for the Client, Relay, and Service that achieve preconditions 2-4.  (This specification does not address precondition 1.)</t>
      <t>This specification assumes that the Service is identified by an Access Description <xref target="I-D.schwartz-masque-access-descriptions"/>, which we call the "Service Description".  For this specification to meet its goals, the Service Description's URL must have been distributed to clients in a globally consistent fashion.  For example, the Service Description URL might be the default value of a software setting, or it might be published on a third party's website.  This specification allows clients to convert the static, long-lived Service Description URL into a fresh Service Description without losing the privacy guarantees of Oblivious HTTP.</t>
      <t>In principle, Services could achieve a similar effect by distributing their Service Descriptions directly through this globally consistent channel.  However, these ad hoc pubication channels may not be fast enough to support frequent updates (e.g., key rotations), especially if updates require user intervention.</t>
      <t>This draft combines elements of the "Direct Discovery", "Single Proxy Discovery", and "Independent Verification" strategies defined in <xref target="I-D.wood-key-consistency"/>.</t>
    </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>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In the Key Consistency Double-Check procedure, the Client emits two HTTP GET requests: one to the Relay, and one through the Relay to the Service Description Host using CONNECT-UDP.  (The Service Description Host, Gateway, and Target are most commonly expected to be a single origin.)  The Relay will forward the first request to the Service Description Host if the response is not in cache.</t>
      <figure>
        <name>Overview of Key-Consistency Double-Check</name>
        <artwork><![CDATA[
          +--------+       +-------+       +-------------+
          |        |<=====>|       |<----->|   Service   |
          | Client |       | Relay |       | Description |
          |        |<=====================>|    Host     |
          +--------+       +-------+       +-------------+
]]></artwork>
      </figure>
      <t>The Relay caches the response, ensuring that all clients share it during its freshness lifetime.  The client checks this against the authenticated response from the Service Description Host, preventing forgeries.</t>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <section anchor="oblivious-service">
        <name>Oblivious Service</name>
        <t>The Oblivious Service <bcp14>MUST</bcp14> publish an Access Description <xref target="I-D.schwartz-masque-access-descriptions"/> containing the "ohttp.gateway" key, e.g.:</t>
        <sourcecode type="JSON"><![CDATA[
{
  "ohttp": {
    "gateway": {
      "uri": "https://example.com/ohttp/",
      "key": "(KeyConfig in Base64)"
    }
  }
}
]]></sourcecode>
        <t>This Access Description is called the Service Description, and its origin is called the Service Description Host.  This origin <bcp14>MUST</bcp14> support HTTP/3 <xref target="RFC9114"/>, so that it can be accessed via the proxy's CONNECT-UDP service (see <xref target="relay"/>).</t>
        <t>The Service Description Host <bcp14>MUST</bcp14> include a "strong validator" ETag (<xref section="2" sectionFormat="of" target="RFC7232"/>) in any response to a GET request for this Service Description, and <bcp14>MUST</bcp14> support the "If-Match" HTTP request header (<xref section="3" sectionFormat="of" target="RFC7232"/>).  The response <bcp14>MUST</bcp14> indicate "Cache-Control: public, no-transform, s-maxage=(...), immutable" <xref target="RFC9111"/><xref target="RFC8246"/>.  For efficiency reasons, the max age <bcp14>SHOULD</bcp14> be at least 60 seconds, and preferably much longer.</t>
        <t>If the Service Description changes, and the resource receives a request whose "If-Match" header identifies a previously served version that has not yet expired, it <bcp14>MUST</bcp14> return a success response containing the previous version.  This response <bcp14>MAY</bcp14> indicate "Cache-Control: private".</t>
      </section>
      <section anchor="relay">
        <name>Oblivious Relay</name>
        <t>The Oblivious Relay <bcp14>MUST</bcp14> also provide CONNECT-UDP service <xref target="I-D.ietf-masque-connect-udp"/>, and <bcp14>SHOULD</bcp14> also offer DNS over HTTPS <xref target="RFC8484"/>, to enable the use of HTTPS records <xref target="SVCB"/> with CONNECT-UDP.  This corresponds to an Access Description that includes the "ohttp.relay", "udp", and "dns" keys:</t>
        <figure>
          <name>Example Relay Access Service Description</name>
          <sourcecode type="JSON"><![CDATA[
{
  "dns": {
    "template": "https://doh.example.com/dns-query{?dns}",
  },
  "udp": {
    "template":
        "https://proxy.example.org/masque{?target_host,target_port}"
  },
  "ohttp": {
    "relay": {
      "template": "https://relay.example.org/ohttp{?request_uri}"
    }
  }
}
]]></sourcecode>
        </figure>
        <t>The Oblivious Relay <bcp14>MUST</bcp14> allow use of the GET method to retrieve small JSON responses, and <bcp14>SHOULD</bcp14> make ample cache space available in order to avoid eviction of Service Descriptions.  The Relay <bcp14>SHOULD</bcp14> share cache state among all clients, to ensure that they use the same Service Descriptions for each Oblivious Service.  If the cache must be partitioned for architectural or performance reasons, operators <bcp14>SHOULD</bcp14> keep the number of users in each partition as large as possible.</t>
        <t>Oblivious Relays <bcp14>MUST</bcp14> preserve the ETag response header on cached responses, and <bcp14>MUST</bcp14> add an Age header (<xref section="5.1" sectionFormat="comma" target="RFC9111"/>) to all proxied responses.  Oblivious Relays <bcp14>MUST</bcp14> respect the "Cache-Control: immutable" directive, and <bcp14>MUST NOT</bcp14> revalidate fresh immutable cache entries in response to any incoming requests.  (Note that this is different from the general recommendation in <xref section="2.1" sectionFormat="of" target="RFC8246"/>).  Oblivious Relays also <bcp14>MUST NOT</bcp14> accept PUSH_PROMISE frames from the target.</t>
        <t>Relays <bcp14>SHOULD</bcp14> employ defenses against malicious attempts to fill the cache.  Some possible defenses include:</t>
        <ul spacing="normal">
          <li>Rate-limiting each client's use of GET requests.</li>
          <li>Prioritizing preservation of cache entries that have been served to many clients, if eviction is required.</li>
        </ul>
        <t>Oblivious Relays that are not intended for general-purpose proxy usage <bcp14>MAY</bcp14> impose strict transfer limits or rate limits on HTTP CONNECT and CONNECT-UDP usage.</t>
        <t>If the Relay offers a DNS over HTTPS resolver, it <bcp14>MUST NOT</bcp14> enable EDNS Client Subnet support <xref target="RFC7871"/>.</t>
      </section>
      <section anchor="client">
        <name>Client</name>
        <t>The Client is assumed to know an "https" URI of the relevant Service Description.  Before using that Service Description, it <bcp14>MUST</bcp14> perform the following "double-check" procedure:</t>
        <ol spacing="normal" type="1"><li>Send a GET request to the Oblivious Relay's template (<tt>ohttp.proxy.template</tt>) with <tt>request_uri</tt> set to the Service Description URI.</li>
          <li>Record the response (A).</li>
          <li>Check that response A's "Cache-Control" values indicates "public" and "immutable".</li>
          <li>Establish a CONNECT-UDP tunnel through the proxy to the Service Description URI's origin.</li>
          <li>Fetch the Service Description URI through this tunnel, using a GET request with "If-Match" set to response A's ETag.</li>
          <li>Record the response (B).</li>
          <li>Check that responses A and B were successful and the contents are identical, otherwise fail.</li>
        </ol>
        <t>This procedure ensures that the Service Description is authentic and will be shared by all users of this proxy.  Once response A or B expires, the client <bcp14>MUST</bcp14> refresh it before continuing to use this Service Description, and <bcp14>MUST</bcp14> repeat the "double-check" process if either response changes.</t>
        <t>Clients <bcp14>MUST</bcp14> perform each fetch to the origin (step 4) as a fully isolated request.  Any state related to this origin (e.g. cached DNS records, CONNECT-UDP tunnels, QUIC transport state, TLS session tickets, HTTP cookies) <bcp14>MUST NOT</bcp14> be shared with prior or subsequent requests.</t>
      </section>
    </section>
    <section anchor="example-oblivious-doh">
      <name>Example: Oblivious DoH</name>
      <t>In this example, the client has been configured with an Oblivious DoH server and an Oblivious Relay.  The Oblivious DoH server is identified by a Service Description at "https://doh.example.com/config.json" with the following contents:</t>
      <sourcecode type="JSON"><![CDATA[
{
  "dns": {
    "template": "https://doh.example.com/dns-query{?dns}",
  },
  "ohttp": {
    "gateway": {
      "uri": "https://example.com/ohttp/",
      "key": "(KeyConfig in Base64)"
    }
  }
}
]]></sourcecode>
      <t>The Oblivious Relay is identified as "proxy.example.org", which implies an Access Description at "https://proxy.example.org/.well-known/access-services".  This resource's contents are:</t>
      <sourcecode type="JSON"><![CDATA[
{
  "dns": {
    "template": "https://proxy.example.org/dns-query{?dns}",
  },
  "udp": {
    "template":
        "https://proxy.example.org/masque{?target_host,target_port}"
  },
  "ohttp": {
    "relay": {
      "template": "https://relay.example.org/ohttp{?request_uri}"
    }
  }
}
]]></sourcecode>
      <t>The following exchanges then occur between the client and the proxy:</t>
      <artwork><![CDATA[
HEADERS
:method = GET
:scheme = https
:authority = relay.example.org
:path = /ohttp?request_uri=https%3A%2F%2Fdoh.example.com%2Fconfig.json
accept: application/access-services+json

                      HEADERS
                      :status = 200
                      cache-control: public, immutable, \
                          no-transform, s-maxage=86400
                      age: 80000
                      etag: ABCD1234
                      content-type: application/access-services+json
                      [Service Description contents here]

HEADERS
:method = CONNECT
:protocol = connect-udp
:scheme = https
:authority = proxy.example.org
:path = /masque?target_host=doh.example.com,target_port=443
capsule-protocol = ?1

                              HEADERS
                              :status = 200
                              capsule-protocol = ?1
]]></artwork>
      <t>The client now has a CONNECT-UDP tunnel to <tt>doh.example.com</tt>, over which it performs the following GET request using HTTP/3:</t>
      <artwork><![CDATA[
HEADERS
:method = GET
:scheme = https
:authority = doh.example.com
:path = /config.json
if-match = ABCD1234

                      HEADERS
                      :status = 200
                      cache-control: public, immutable, \
                          no-transform, s-maxage=86400
                      etag: ABCD1234
                      content-type: application/access-services+json
                      [Service Description contents here]
]]></artwork>
      <t>Having successfully fetched the Service Description from both locations, the client confirms that:</t>
      <ul spacing="normal">
        <li>The responses are identical.</li>
        <li>The cache-control response from the proxy contained the "public" and "immutable" directives.</li>
      </ul>
      <t>The client can now use the KeyConfig in this Service Description to reach the Oblivious DoH server, by converting DNS-over-HTTPS requests into Binary HTTP requests for "https://doh.example.com/dns-query", encrypting them to <tt>ohttp.gateway.key</tt>, and POSTing the encrypted requests to "https://relay.example.org/ohttp?request_uri=https%3A%2F%2Fexample.com%2Fohttp%2F".</t>
    </section>
    <section anchor="performance-implications">
      <name>Performance Implications</name>
      <section anchor="latency">
        <name>Latency</name>
        <t>Suppose that the Client-Relay Round-Trip Time (RTT) is <tt>A</tt>, and the Relay-Service Description Host RTT is <tt>B</tt>.  Suppose additionally that the Client has a persistent connection to the Relay that is already running.  Then the procedure described in <xref target="client"/> requires:</t>
        <ul spacing="normal">
          <li>
            <t><tt>A</tt> for the GET request to the Relay
            </t>
            <ul spacing="normal">
              <li>
                <tt>+B</tt> if the requested Service Description is not in cache</li>
              <li>
                <tt>+B</tt> if the Relay does not have a TLS session ticket for the Service Description Host</li>
            </ul>
          </li>
          <li>
            <tt>A</tt> for the CONNECT-UDP request to the Relay</li>
          <li>
            <tt>A + B</tt> for the QUIC handshake to the Service Description Host</li>
          <li>
            <tt>A + B</tt> for the GET request to the Service Description Host</li>
        </ul>
        <t>This is a total of <tt>4A + 4B</tt> in the worst case.  However, clients can reduce the latency by issuing the requests to the Relay in parallel, and by using CONNECT-UDP's "false start" support.  The Service Description Host can also optimize performance, by issuing long-lived TLS session tickets.  With these optimizations, the expected total time is <tt>2A + 2B</tt>.</t>
        <t>This procedure only needs to be repeated if the Service Description has expired.  To enable regular key rotation and operational adjustments, a cache lifetime of 24 hours may be suitable.  Clients <bcp14>MAY</bcp14> perform this procedure in advance of an expiration to avoid a delay.</t>
      </section>
      <section anchor="thundering-herds">
        <name>Thundering Herds</name>
        <t>All clients of the same Relay and Service will have locally cached Service Descriptions with the same expiration time.  When this entry expires, all active clients will send refresh GET requests to the proxy at their next request.  Relays <bcp14>SHOULD</bcp14> use "request coalescing" to avoid duplicate cache-refresh requests to the target.</t>
        <t>If the Service Description has changed, these clients will initiate GET requests through the Relay to the Service Description Host to double-check the new contents.  Relays and Service Description Hosts <bcp14>MAY</bcp14> use an HTTP 503 response with a "Retry-After" header to manage load spikes.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="in-scope">
        <name>In scope</name>
        <section anchor="forgery">
          <name>Forgery</name>
          <t>A malicious Relay could attempt to learn the contents of the Oblivious HTTP request by forging a Service Description containing its own KeyConfig.  This is prevented by the client's requirement that the KeyConfig be served to it by the Service Description Host over HTTPS (<xref target="client"/>).</t>
        </section>
        <section anchor="deanonymization">
          <name>Deanonymization</name>
          <t>A malicious Service could attempt to link multiple Oblivious HTTP requests together by issuing each Client a unique, persistent KeyConfig.  This attack is prevented by the Client's requirement that the KeyConfig be fresh according to the Relay's cache (<xref target="client"/>).</t>
          <t>A malicious Service could attempt to rotate its entry in the Relay's cache in several ways:</t>
          <ul spacing="normal">
            <li>Using HTTP PUSH_PROMISE frames.  This attack is prevented by disabling PUSH_PROMISE at the Relay (<xref target="relay"/>).</li>
            <li>
              <t>By also acting as a Client and sending requests designed to replace the Service Description in the cache before it expires:
              </t>
              <ul spacing="normal">
                <li>By sending GET requests with a "Cache-Control: no-cache" or similar directive.  This is prevented by the response's "Cache-Control: public, immutable" directives, which are verified by the Client (<xref target="client"/>), and by the Relay's obligation to to respect these directives strictly (<xref target="relay"/>).</li>
                <li>By filling the cache with new entries, causing its previous Service Description to be evicted.  <xref target="relay"/> describes some possible mitigations.</li>
              </ul>
            </li>
          </ul>
          <t>A malicious Service could attempt to link different requests for the Service Description, in order to link the Oblivious HTTP requests that follow shortly after.  This is prevented by fully isolating each request (<xref target="client"/>), and by disabling EDNS Client Subnet (<xref target="relay"/>).</t>
        </section>
        <section anchor="abusive-traffic">
          <name>Abusive traffic</name>
          <t>A malicious client could use the proxy to send abusive traffic to any destination on the internet.  Abuse concerns can be mitigated by imposing a rate limit at the proxy (<xref target="relay"/>).</t>
        </section>
      </section>
      <section anchor="out-of-scope">
        <name>Out of scope</name>
        <t>This specification assumes that the client starts with identities of the Relay and Service that are authentic and widely shared.  If these identities are inauthentic, or are unique to the client, then the security goals of this specification are not achieved.</t>
        <t>This specification assumes that at most a small fraction of Clients are acting on behalf of a malicious Service.  If a large fraction of the Clients are malicious, they could conspire to flood the Relay's cache with entries that seem popular, leading to rapid eviction of the malicious Service's Service Descriptions.  Similar concerns apply if a malicious Service can compel naive Clients to fetch a very large number of Service Descriptions.</t>
        <t>A Client's requests for the Service Description may become linkable if they have distinctive QUIC Initials, HTTP/3 Settings, RTT, or other protocol features observable through the Relay.  This specification does not offer specific mitigations for protocol fingerprinting.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>No IANA action is requested.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-ohai-ohttp">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="15" month="February" year="2022"/>
            <abstract>
              <t>   This document describes a system for the forwarding of encrypted HTTP
   messages.  This allows a client to make multiple requests of a server
   without the server being able to link those requests to the client or
   to identify the requests as having come from the same client.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-01"/>
        </reference>
        <reference anchor="I-D.schwartz-masque-access-descriptions">
          <front>
            <title>HTTP Access Service Description Objects</title>
            <author fullname="Benjamin M. Schwartz">
              <organization>Google LLC</organization>
            </author>
            <date day="28" month="June" year="2022"/>
            <abstract>
              <t>   HTTP proxies can operate several different kinds of access services.
   This specification provides a format for identifying a collection of
   such services.

About This Document

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

   Status information for this document may be found at
   https://datatracker.ietf.org/doc/draft-schwartz-masque-access-
   descriptions/.

   Source for this draft and an issue tracker can be found at
   https://github.com/bemasc/access-services.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schwartz-masque-access-descriptions-01"/>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC9114">
          <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="RFC7232">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7232"/>
          <seriesInfo name="DOI" value="10.17487/RFC7232"/>
        </reference>
        <reference anchor="RFC9111">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. </t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC8246">
          <front>
            <title>HTTP Immutable Responses</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2017"/>
            <abstract>
              <t>The immutable HTTP response Cache-Control extension allows servers to identify resources that will not be updated during their freshness lifetime.  This ensures that a client never needs to revalidate a cached fresh resource to be certain it has not been modified.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8246"/>
          <seriesInfo name="DOI" value="10.17487/RFC8246"/>
        </reference>
        <reference anchor="I-D.ietf-masque-connect-udp">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="17" month="June" year="2022"/>
            <abstract>
              <t>   This document describes how to proxy UDP in HTTP, similar to how the
   HTTP CONNECT method allows proxying TCP in HTTP.  More specifically,
   this document defines a protocol that allows an HTTP client to create
   a tunnel for UDP communications through an HTTP server that acts as a
   proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-15"/>
        </reference>
        <reference anchor="RFC8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="RFC7871">
          <front>
            <title>Client Subnet in DNS Queries</title>
            <author fullname="C. Contavalli" initials="C." surname="Contavalli">
              <organization/>
            </author>
            <author fullname="W. van der Gaast" initials="W." surname="van der Gaast">
              <organization/>
            </author>
            <author fullname="D. Lawrence" initials="D." surname="Lawrence">
              <organization/>
            </author>
            <author fullname="W. Kumari" initials="W." surname="Kumari">
              <organization/>
            </author>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes an Extension Mechanisms for DNS (EDNS0) option that is in active use to carry information about the network that originated a DNS query and the network for which the subsequent response can be cached.  Since it has some known operational and privacy shortcomings, a revision will be worked through the IETF for improvement.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7871"/>
          <seriesInfo name="DOI" value="10.17487/RFC7871"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.wood-key-consistency">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="March" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wood-key-consistency-02"/>
        </reference>
        <reference anchor="SVCB">
          <front>
            <title>Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</title>
            <author fullname="Ben Schwartz">
              <organization>Google</organization>
            </author>
            <author fullname="Mike Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="24" month="May" year="2022"/>
            <abstract>
              <t>   This document specifies the "SVCB" and "HTTPS" DNS resource record
   (RR) types to facilitate the lookup of information needed to make
   connections to network services, such as for HTTP origins.  SVCB
   records allow a service to be provided from multiple alternative
   endpoints, each with associated parameters (such as transport
   protocol configuration and keys for encrypting the TLS ClientHello).
   They also enable aliasing of apex domains, which is not possible with
   CNAME.  The HTTPS RR is a variation of SVCB for use with HTTP [HTTP].
   By providing more information to the client before it attempts to
   establish a connection, these records offer potential benefits to
   both performance and privacy.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/MikeBishop/dns-alt-svc
   (https://github.com/MikeBishop/dns-alt-svc).  The most recent working
   version of the document, open issues, etc. should all be available
   there.  The authors (gratefully) accept pull requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-svcb-https-10"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/gPAWVkrz0YAAA==

-->

</rfc>
