Internet-Draft rttp URI Scheme September 2026
Li Expires 24 March 2027 [Page]
Workgroup:
Independent Submission
Internet-Draft:
draft-li-rttp-intent-addressing-00
Published:
Intended Status:
Informational
Expires:
Author:
S. Li
RTTP.COM Organization

Intent Addressing in the rttp URI Scheme

Abstract

This document specifies the "rttp" URI scheme. An "rttp" URI names a claim of intent directed at an identified subject; the address of that subject is derived by computation from the URI authority, and no lookup service, registry, or name-resolution system is consulted at resolution time. The document also states the requirements a client MUST satisfy when it handles such a URI, in order to avoid two failure modes that short, user-embeddable strings otherwise invite: using the authority as a navigation target (open redirect), and using a registered protocol handler as a general-purpose launcher.

Status of This Memo

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 24 March 2027.

Table of Contents

1. Introduction

Most URI schemes name a location: the authority identifies a host to be contacted. This document specifies a scheme that names something else: a claim of intent directed at an identified subject. What a client does with that claim is defined by the scheme; where the subject might be reached is not part of the URI and is not resolved through any lookup service.

Three properties follow from that choice and are normative in this document:

The scheme is subject to registration with IANA under [RFC7595]. Its registration status is recorded in Section 8; as of this writing the request is submitted and pending, and the name is not registered.

Readers familiar with other "agent" or identity addressing schemes should note what is not claimed here. This document does not define a discovery mechanism, a transport, a key directory, or an authorization decision. It defines a URI scheme and the minimum client behaviour that makes the scheme safe to embed.

2. Conventions and Terminology

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 uses the ABNF notation of [RFC5234] and the URI syntax of [RFC3986].

Terminology:

authority
The three-segment component <intent>.<pillar>.<root> defined in Section 3.1. It is a name, not a host name, and is never resolved.
claim of intent
A statement that a subject intends an action. It is a claim: it is not evidence, and it does not by itself establish the identity of the subject.
subject
The entity the claim is directed at, identified by the authority.
action
The optional final path segment naming what is claimed to be intended.
ROUTE_SHARD
The 16-byte value derived from the authority as specified in Section 3.4.
AID
A self-certifying subject identifier defined outside this document. This document does not define AID, and makes no assumption about its length or encoding beyond what Section 3.2 and Section 5 require. Nothing in this specification depends on an AID registry or authority.
organ
In the readable form of intent, a human-readable token identifying a subject. In the hash form, a fixed-width derived value.

3. The rttp URI Scheme

3.1. Syntax

The general form of an rttp URI is:

rttp://<intent>.<pillar>.<root>[/<action>]

The authority comprises exactly three dot-separated segments, in this order:

  • intent: either 8 lowercase hexadecimal digits, or a readable token matching 1*( %x61-7A / DIGIT / "-" ). The hash form is a derived value; the readable form is an operator-chosen label. Both are opaque to a client.
  • pillar: an operator-chosen label matching 1*( %x61-7A / DIGIT / "-" ). This document defines no enumeration of pillar labels and no registry for them; the label is meaningful to the operator that assigned it.
  • root: an operator-chosen label matching 1*( %x61-7A / DIGIT / "-" ).

The action, when present, is a single path segment: "/" 1*( %x61-7A / DIGIT / "-" ).

ABNF:

rttp-URI     = "rttp://" authority [ "/" action ]
authority    = intent "." pillar "." root
intent       = hash-intent / name-intent
hash-intent  = 8 lowhex
name-intent  = 1*( %x61-7A / DIGIT / "-" )
pillar       = 1*( %x61-7A / DIGIT / "-" )
root         = 1*( %x61-7A / DIGIT / "-" )
action       = 1*( %x61-7A / DIGIT / "-" )
lowhex       = %x30-39 / %x61-66

Examples (the example labels are reserved names per [RFC2606]; operators use labels they control):

rttp://f3b2a1c4.pillar.example/vessel
rttp://organ.pillar.example/verify
rttp://f3b2a1c4.pillar.example

The fragment component is not part of this scheme and MUST NOT be used to address an action.

3.2. Reserved Characters and Exclusions

  • The canonical form is lowercase US-ASCII. Uppercase is invalid input, not a formatting difference: a parser MUST NOT normalise an uppercase string into a valid URI, because two distinct strings would then map onto one address.
  • ., / and :// are the delimiters defined by this scheme.
  • This scheme defines no userinfo, no port, no query, and no fragment. A URI containing any of them is not a valid rttp URI. In particular, credentials cannot appear in an rttp URI, and there is no field in which to exfiltrate data.
  • Percent-encoding follows Section 2.1 of [RFC3986]. Because no component requires characters outside the unreserved set, a canonical URI contains no percent-encoded octets; a parser MAY reject such input rather than normalising it.
  • There is no "rttps" scheme and no protocol fallback. A client that does not implement this scheme fails closed (Section 4).

3.3. Default Operation

Dereferencing an rttp URI without an action requests the default operation: one stateful, single round-trip semantic request against the subject named by the authority.

The default operation is safe in the sense of Section 3.1 of [RFC3986]: it creates no obligations and mutates no state of the subject.

When an action is present, the default operation is not implied for it. An action names what is claimed to be intended; the safety of a given action is not defined by this document, and a client MUST NOT infer safety from this section (Section 5).

3.4. The Address: ROUTE_SHARD Derivation

The routing address of an rttp URI is derived from the authority alone:

canonical_authority = intent "." pillar "." root
                      (lowercase, US-ASCII)
ROUTE_SHARD         = SHA-256(ASCII(canonical_authority))[0:16]

The authority only: the scheme name is excluded, // is excluded, and any action is excluded.

Table 1: Properties of the derived address
Property Meaning
Deterministic The same authority always yields the same address.
Pure computation No DNS, no registry, no network access, no lookup service.
One-way The authority cannot be recovered from the address.
Action-independent Different actions on one authority yield the same address.

The last property is the reason an action is not part of the addressing component: an address is where, not what. Were the action to participate in derivation, two different actions on one subject would become two different addresses, splitting one subject into several.

Because the derivation is a computation on a string, the URI is usable without network access, and no third party is consulted when it is used. A client MUST NOT perform a lookup in order to use an rttp URI (Section 4).

4. Client Requirements

A client that handles an rttp URI (including a resolver page, a protocol handler, and a library that renders one) MUST satisfy the requirements below. They follow from Section 5: an rttp URI may be supplied by an untrusted party, its authority is a claim rather than a proof, and the strings are short enough to be embedded anywhere.

4.1. No Navigation to the URI

The authority and action components MUST NOT be used as a navigation target. A client that renders a link, redirect, or fetch derived from any part of an rttp URI is an open redirect and is non-conformant.

A client MAY navigate only to a destination that is fixed in advance by the client itself.

4.2. Scheme Prefix Check

A protocol handler MUST reject any input whose scheme is neither rttp nor the exact scheme name under which that handler was itself registered. Without this check, the handler becomes a general-purpose launcher that any page can use to open an arbitrary URI of any scheme.

4.4. Rationale

rttp://<intent>.<pillar>.<root>/<action> is a short, human-readable string that any page can embed in a link. Without the rules above, the scheme would hand third parties two primitive attacks: using an operator's own domain as a redirector, and using a registered handler as a launcher for URIs the user never intended to open. Both are properties of the embedding context, not of the URI syntax, which is why they are stated as client requirements rather than as grammar rules.

5. Security Considerations

6. Privacy Considerations

7. Internationalization Considerations

The canonical form of an rttp URI is lowercase US-ASCII, and no international form is defined. Characters outside the permitted set are invalid input rather than input to be converted: a client MUST NOT map a Unicode label to its ASCII form (for example, by case folding or by applying an IDNA-style transformation) in order to accept it, and MUST NOT render an rttp URI as an IRI.

This is deliberate. The scheme has no host to resolve, so there is no need for a label-to-ASCII transformation; permitting one would introduce a second way to write one address.

8. IANA Considerations

IANA is requested to register the URI scheme rttp in the "Uniform Resource Identifier (URI) Schemes" registry, following the template of Section 7.4 of [RFC7595] and the guidance of [RFC8126].

Scheme name:
rttp
Status:
Provisional
Applications/protocols that use this scheme name:
URIs of this scheme name a claim of intent directed at an identified subject. Applications include intent-addressed requests between autonomous software agents and the client-side handling of such URIs by protocol handlers in browsers and operating systems. The scheme defines addressing only; it does not define a transport or a discovery mechanism.
Contact:
ShaoBao Li <mailto:lee@rttp.com>
Change controller:
RTTP.COM Organization
References:
This document, and the reference specification published at https://rttp.com/RFC-002/.
Security considerations:
See Section 5 of this document.

Registration status at the time of writing: a registration request was submitted to IANA (ticket #1459939); the request is pending, and the scheme is not registered. It is inaccurate to describe the scheme as "registered", "assigned", or "standardised" until IANA publishes the registration.

If this document is approved for publication as an RFC, IANA is requested to update the reference in the registry entry to point at that RFC.

9. Acknowledgements

The author thanks the reviewers of the URI review process for their attention to the client-behaviour requirements, which are the part of this specification most likely to be misimplemented.

10. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC3986]
Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
[RFC5234]
Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, DOI 10.17487/RFC5234, , <https://www.rfc-editor.org/info/rfc5234>.
[RFC7595]
Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines and Registration Procedures for URI Schemes", BCP 35, RFC 7595, DOI 10.17487/RFC7595, , <https://www.rfc-editor.org/info/rfc7595>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.

11. Informative References

[RFC2606]
Eastlake 3rd, D. and A. Panitz, "Reserved Top Level DNS Names", BCP 32, RFC 2606, DOI 10.17487/RFC2606, , <https://www.rfc-editor.org/info/rfc2606>.
[RFC8126]
Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, , <https://www.rfc-editor.org/info/rfc8126>.

Examples

Valid forms

rttp://f3b2a1c4.pillar.example/vessel      (hash form)
rttp://organ.pillar.example/verify         (readable form)
rttp://f3b2a1c4.pillar.example             (default operation)

Invalid forms and the reason

Table 2: Invalid input and why it is rejected
Input Reason
RTTP://f3b2a1c4.pillar.example/vessel Uppercase scheme or components are invalid input, not normalisable.
rttp://f3b2a1c4.pillar.example/ Trailing slash with an empty action is not a valid action.
rttp://f3b2a1c4.pillar.example?v=1 No query component is defined.
rttp://f3b2a1c4.pillar.example#top No fragment component is defined.
rttp://user@f3b2a1c4.pillar.example/v No userinfo component is defined.
rttp://f3b2a1c4.pillar.example:80/v No port component is defined.
rttp://f3b2a1c4.pillar/v Authority does not have exactly three segments.
rttp://f3b2a1c4.pillar.example/vessel/extra Action is a single path segment.

Conformance

The reference specification at https://rttp.com/RFC-002/ is accompanied by a published set of deterministic conformance vectors, replayed by independent implementations that share no code. Implementations of this scheme are encouraged to replay the URI-parsing portion of that set; agreement is a statement about parsing only, and no performance property is claimed.

Author's Address

ShaoBao Li
RTTP.COM Organization