<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC7871 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7871.xml">
]>

<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>

<rfc ipr="trust200902" docName="draft-bellis-dnsop-http-record-00" category="std">

  <front>
    <title>A DNS Resource Record for HTTP</title>

    <author initials="R." surname="Bellis" fullname="Ray Bellis">
      <organization abbrev="ISC">Internet Systems Consortium, Inc.</organization>
      <address>
        <postal>
          <street>950 Charter Street</street>
          <city>Redwood City</city>
          <code>CA 94063</code>
          <country>USA</country>
        </postal>
        <phone>+1 650 423 1200</phone>
        <email>ray@isc.org</email>
      </address>
    </author>

    <date year="2018" month="November" day="04"/>

    <area>Internet</area>
    <workgroup>DNSOP Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document specifies an “HTTP” resource record type for the DNS to
facilitate the lookup of the server hostname of HTTP(s) URIs.  It is
intended to replace the use of CNAME records for this purpose, and in
the process provides a solution for the inability of the DNS to allow a
CNAME to be placed at the apex of a domain name.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>It is very common for HTTP(s) URIs to contain a domain name that is not
the same as the hostname of the actual server that hosts the content.</t>

<t>This is typically achieved via a CNAME record where the owner name of
that record (the “Alias”) is the domain name from the URI and the
Canonical name field in its RDATA corresponds with the target hostname
(although it should be noted that this strictly a violation of the
original design semantics of the CNAME record).</t>

<t>It is also impossible to store a CNAME at the apex of a domain name,
which causes signficant difficulties if you wish to redirect your domain
name without a “www” prefix to a content delivery network (CDN).  The
only portable solution at the moment is to determine the IP address
records of the content host and insert them directly at the apex of the
zone, but this is brittle, and prevents the correct operation of typical
CDN features.</t>

<t>While there have been previous attempts to promote the use of the SRV
record instead of CNAME records, there have been concerns raised about
the performance impact of the additional DNS lookup an SRV record
would typically require.</t>

<t>To achieve equivalent end-user performance as existing CNAME-based
solutions, this document permits recursive resolvers to pre-emptively
look up the target of an HTTP Record and return the corresponding
records to the client.  While this feature is not mandatory it is hoped
that support would over time become near ubiquitous.</t>

<t>Also, the presence of the Port field in an SRV record is incompatible
with the “Same Origin” security policy enforced by web browsers and in
practise the load-balancing / fallback capabilities of the SRV record
are not widely used either, and non-DNS based solutions for this are
already widely deployed for HTTP traffic.</t>

<t>This document therefore specifies a minimal “HTTP” resource record type
for the DNS to facilitate the redirection from the domain name portion
of an HTTP(s) URI to the server hostname and thence to A or AAAA
records.  It is specifically intended to replace the use of CNAME
records for this purpose, and in the process provides a solution for the
inability of the DNS to allow a CNAME to be placed at the apex of a
domain name.</t>

</section>
<section anchor="terminology" title="Terminology">

<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 anchor="description" title="Description">

<t>The owner name of an HTTP RR is the domain name portion of an HTTP(s) URI.</t>

<t>The use of underscore label prefixes (e.g. _http._tcp) was considered,
but rejected since it prohibits the use of wildcard records which us a
valuable technique for offering per-customer domain prefixes without
requiring that every prefix be individually provisioned.</t>

<section anchor="wire" title="Wire Format">

<t>The RDATA of an HTTP RR is a domain name in uncompressed wire format.</t>

</section>
<section anchor="presentation-format" title="Presentation Format">

<t>The RDATA of an HTTP RR is presented as a domain name in standard
master file format.</t>

</section>
<section anchor="server-operation" title=" Server Operation">

<t>Recursive resolvers MAY on receiving a request for an HTTP record look
up the A and AAAA records for the target (either from cache, or via new
iterative queries) and include the results in the Additional Section of
the response.</t>

<t>If the recursive resolver is performing DNSSEC resolution but is unable
to validate the A or AAAA responses it MUST NOT include them in the
response unless the client has specified the +CD (checking disabled)
flag.</t>

<t>Where EDNS Client Subnet <xref target="RFC7871"/> is configured on the resolver those
A and AAAA lookups MUST be performed as if the client had made those
queries directly to the resolver.</t>

</section>
<section anchor="client-operation" title=" Client Operation">

<t>HTTP clients supporting this specification MUST issue parallel DNS
requests for the A, AAAA and HTTP records for the domain portion of an
http: or https: URI.</t>

<t>If an HTTP record is returned, the client MUST either use the A and AAAA
records contained in the Additional Section of the response, or issue
further parallel requests for the A and AAAA records corresponding to
the domain name in the RDATA of the HTTP record and then use those
IP addresses to access the URI.</t>

<t>If the original A and AAAA lookups return IP addresses these MUST only
be used if no HTTP record is returned.</t>

<t>« the above needs more text around timing, happy eyeballs, etc. »</t>

</section>
</section>
<section anchor="security" title="Security Considerations">

<t>TBD</t>

</section>
<section anchor="impstatus" title="Implementation status">

<t>« RFC Editor Note: Please remove this entire section prior to
publication as an RFC. »</t>

</section>
<section anchor="privacy-considerations" title="Privacy Considerations">

<t>TBD (if any)</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>« a copy of the RFC 6895 IANA RR TYPE application template will appear
here »</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&RFC7871;


    </references>



  </back>

<!-- ##markdown-source:
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
OjCIPwBUX3U78RUAAA==

-->

</rfc>

