<?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.19 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-alias-proxy-status-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title abbrev="DNS Aliases Proxy-Status">HTTP Proxy-Status Parameter for Next-Hop Aliases</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-alias-proxy-status-01"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple, Inc.</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <date/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>proxy status</keyword>
    <abstract>
      <t>This document defines an HTTP Proxy-Status Parameter that contains a list of aliases
and canonical names received over DNS when establishing a connection to the next hop.</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-ietf-httpbis-alias-proxy-status/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/alias-proxy-status"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Proxy-Status HTTP response field <xref target="PROXY-STATUS"/> allows proxies to convey
information about how a proxied request was handled in HTTP responses sent to clients.
It defines a set of parameters that provide information, such as the name of the next
hop.</t>
      <t><xref target="PROXY-STATUS"/> defines a <tt>next-hop</tt> parameter, which can contain a hostname,
IP address, or alias of the next hop. This parameter can contain only one such item,
so it cannot be used to communicate a chain of aliases encountered during DNS resolution
when connecting to the next hop.</t>
      <t>Knowing the full chain of names that were used during DNS resolution via CNAME records
<xref target="DNS"/> is particularly useful for clients of forward proxies, in which the
client is requesting to connect to a specific target hostname using the CONNECT method
<xref target="HTTP"/> or UDP proxying <xref target="CONNECT-UDP"/>. CNAME records can be used to
"cloak" hosts that perform tracking or malicious activity behind more innocuous hostnames,
and clients such as web browsers use the chain of DNS names to influence behavior like cookie
usage policies <xref target="COOKIES"/> or blocking of malicious hosts.</t>
      <t>This document allows clients to receive the CNAME chain of DNS names for the next hop
by including the list of names in a new <tt>next-hop-aliases</tt> Proxy-Status parameter.</t>
      <section anchor="requirements">
        <name>Requirements</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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>
    <section anchor="parameter">
      <name>next-hop-aliases Parameter</name>
      <t>The <tt>next-hop-aliases</tt> parameter's value is a String that contains one or more DNS names in
a comma-separated list. The items in the list include all alias names and canonical names
received in CNAME records <xref target="DNS"/> during the course of resolving the next hop's
hostname using DNS, not including the original requested hostname itself. The names SHOULD
appear in the order in which they were received in DNS. If there are multiple CNAME records
in the chain, the first name in the <tt>next-hop-aliases</tt> list would be the value in the CNAME
record for the original hostname, and the final name in the <tt>next-hop-aliases</tt> list would
be the name that ultimately resolved to one or more addresses.</t>
      <t>The list of DNS names in <tt>next-hop-aliases</tt> use a comma (",") as a separator between names.
DNS names normally just contain alphanumeric characters and hyphens ("-"), although they
are allowed to contain any character <xref section="3.1" sectionFormat="comma" target="RFC1035"/>, including a comma. To
prevent commas or other special characters in names leading to incorrect parsing,
any characters that appear in names in this list that do not belong to the set of URI
Unreserved Characters <xref section="2.3" sectionFormat="comma" target="RFC3986"/> MUST be percent-encoded as
defined in <xref section="2.1" sectionFormat="comma" target="RFC3986"/>.</t>
      <t>For example, consider a proxy "proxy.example.net" that receives the following records when
performing DNS resolution for the next hop "host.example.com":</t>
      <sourcecode type="dns-example"><![CDATA[
host.example.com.           CNAME   tracker.example.com.
tracker.example.com.        CNAME   service1.example-cdn.com.
service1.example-cdn.com.   AAAA    2001:db8::1
]]></sourcecode>
      <t>The proxy could include the following proxy status in its response:</t>
      <sourcecode type="example"><![CDATA[
Proxy-Status: proxy.example.net; next-hop=2001:db8::1;
    next-hop-aliases="tracker.example.com,service1.example-cdn.com"
]]></sourcecode>
      <t>This indicates that proxy.example.net, which used the IP address "2001:db8::1" as the next hop
for this request, encountered the names "tracker.example.com" and "service1.example-cdn.com"
in the DNS resolution chain. Note that while this example includes both the <tt>next-hop</tt> and
<tt>next-hop-aliases</tt> parameters, <tt>next-hop-aliases</tt> can be included without including <tt>next-hop</tt>.</t>
      <t>The <tt>next-hop-aliases</tt> parameter only applies when DNS was used to resolve the next hop's name, and
does not apply in all situations. Clients can use the information in this parameter to determine
how to use the connection established through the proxy, but need to gracefully handle situations
in which this parameter is not present.</t>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <t>The <tt>next-hop-aliases</tt> parameter does not include any DNSSEC information or imply that DNSSEC was used.
The information included in the parameter can only be trusted to be valid insofar as the client
trusts its proxy to provide accurate information. This information is intended to be used as
a hint, and SHOULD NOT be used for making security decisions about the identity of a resource accessed
through the proxy.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the "next-hop-aliases" parameter
in the "HTTP Proxy-Status Parameters" registry
&lt;<eref target="https://www.iana.org/assignments/http-proxy-status"/>&gt;.</t>
      <dl>
        <dt>Name:</dt>
        <dd>
          <t>next-hop-aliases</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>A string containing one or more DNS aliases or canonical names used to establish a
proxied connection to the next hop.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="PROXY-STATUS">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P. Sikora" initials="P." surname="Sikora">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
        <reference anchor="DNS">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris">
              <organization/>
            </author>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System.  It obsoletes RFC-882.  This memo describes the domain style names and their used for host address look up and electronic mail forwarding.  It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</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 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>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="August" 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="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </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="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="COOKIES">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol.  Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet.  This document obsoletes RFC 2965.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris">
              <organization/>
            </author>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
u5UL0C+mbVKi51D2P7iu7RE1FwAA

-->

</rfc>
