| Internet-Draft | DNSC | March 2026 |
| John | Expires 27 September 2026 | [Page] |
This document specifies a mechanism for serving content, such as HTML or JSON, directly via DNS TXT records. This feature is intended as a fallback mechanism when a primary service (A/AAAA record) is unreachable, or as a lightweight hosting solution for parked domains to display landing pages without requiring active HTTP servers or individual SSL certificates. Trust is established via DNSSEC, allowing browsers to treat the content as secure.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 27 September 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Managing HTTP servers and HTTPS certificates for a large number of parked domains or "placeholder" sites can be resource-intensive and operationally complex. Additionally, when a web server fails (connection refused or timeout), users are typically presented with a generic browser error page.¶
This specification defines the "DNS Content" (DNSC) protocol, which allows User Agents (UAs) to retrieve content directly from the DNS system using structured TXT records. This feature is intended as a fallback mechanism when a primary service (A/AAAA record) is unreachable, or as a lightweight hosting solution for parked domains to display landing pages without requiring active HTTP servers or individual SSL certificates.¶
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document makes use of terminology for record types (TXT), and other technical terms that are specific to the DNS. Since these terms have specific meanings in the DNS, they are not expanded upon first use in this document. For definitions of these and other terms, see [RFC8499].¶
Content is published using DNS TXT records located at a specific prefix indicating the content type.¶
The TXT record MUST be located at a label constructed as follows:¶
_<media-subtype>._dnscontent.<domain>¶
media-subtype corresponds to the IANA media type subtype (e.g., html for text/html, json for application/json).¶
domain corresponds to the FQDN of the service (e.g., example.com).¶
Examples:¶
The TXT record content is a semi-colon separated list of key-value pairs. The keys are case-insensitive.¶
v=DNSC1; [e=<encoding>;] [id=<stream-id>;] [tot=<total-chunks>;] c=<content>¶
| Parameter | Name | Description |
|---|---|---|
| v | Version | REQUIRED. Must be DNSC1. |
| e | Encoding | OPTIONAL. Specifies the compression algorithm applied to the content before Base64 encoding. |
| id | Stream ID | OPTIONAL (REQUIRED if tot > 1). A unique alphanumeric identifier (e.g., a short hash) for this version of the content. Used to correlate chunks. |
| tot | Total Chunks | OPTIONAL. Integer indicating the total number of records (chunks) required to reconstruct the content. Default is 1. |
| c | Content | REQUIRED. The payload data encoded in Base64. If chunking is used, this field contains the first chunk (Sequence 0). |
The parameter e (Encoding) can have following the values:¶
DNS messages have size constraints. To support content larger than a single TXT record's safe limit, the content MAY be split across multiple records.¶
If tot > 1 in the Root Record, the UA MUST fetch additional records. Subsequent chunks are located at subdomains prefixed with the sequence number (1-based index).¶
_<sequence-number>._<media-subtype>._dnscontent.<domain>¶
A UA SHOULD initiate a DNSC lookup under the following conditions:¶
The UA fails to fetch A or AAAA records for a specified domain (NXDOMAIN or NOERROR/NODATA).¶
The UA fails to establish a TCP connection to the IP addresses resolved from A/AAAA records (e.g., Connection Refused, Timed Out).¶
A mechanism (e.g., a specific URI scheme) explicitly requests a DNSC request.¶
Since DNSC does not use TLS certificates (X.509), trust is established via DNSSEC.¶
If the domain is signed with DNSSEC and the chain of trust is validated by the UA (or the recursive resolver trusted by the UA), the content MUST be treated as a secure Context.¶
UAs MAY display a specific indicator (e.g., "Verified by DNSSEC").¶
If DNSSEC validation fails or the zone is unsigned, the content MUST be treated as an insecure Context (similar to plain HTTP).¶
Powerful features (Geolocation, Service Workers, etc.) MUST be disabled.¶
To prevent loops or excessive DNS traffic:¶
_html._dnscontent.example.com. IN TXT "v=DNSC1; e=raw; c=PGgxPldlbGNvbWU8L2gxPg=="¶
Decodes to <h1>Welcome</h1>¶
Root Record:¶
_html._dnscontent.domain.com. IN TXT "v=DNSC1; e=br; id=req89; tot=2; c=G873..."¶
Chunk 1:¶
_1._html._dnscontent.domain.com. IN TXT "v=DNSC1; id=req89; c=...B729"¶
The UA fetches both, verifies id=req89 matches, concatenates the Base64 payloads, decodes, decompresses using Brotli, and renders.¶