Content Delivery Network Interconnection (CDNI) Metadata
Extracted elements (31)
The interface uses HTTP and its native caching mechanisms (ETags, Cache-Control) for metadata cacheability, reducing acquisition latency while maintaining freshness. I-JSON is used for encoding to leverage existing data structure tooling rather than defining a new format.
The metadata object model decomposes CDNI Metadata into separately addressable objects connected via Link URI references rather than always embedding sub-objects. This enables a single GenericMetadata object to be fetched once and referenced by multiple hosts and URI paths, minimizing duplication.
When DNS-based redirection is employed, a dCDN cannot evaluate PathMetadata-level constraints at request-routing time because only the hostname is available. dCDNs SHOULD still process all PathMetadata before accepting a redirection request to detect unsupported mandatory-to-enforce metadata.
A CDN MUST NOT attempt to use metadata that has been marked as 'incomprehensible' by a uCDN; a dCDN with MtE=true and incomprehensible=true MUST NOT serve the content.
A CDNI Metadata server MUST support the HTTP GET and HEAD methods. HTTP responses containing a body SHOULD include an ETag to enable validation of cached representations.
A single HostMetadata or PathMetadata object MUST NOT contain multiple GenericMetadata objects of the same type; if duplicate types are present, the receiver MUST ignore all but the first occurrence.
CDNI Metadata objects MUST be encoded as I-JSON objects [RFC7493]. All property names (dictionary keys) defined by this document MUST be lowercase.
dCDNs and tCDNs MUST support the parsing of all CDNI Metadata objects specified in this document, though a dCDN need not implement the underlying functionality of non-structural GenericMetadata objects.
GenericMetadata types MUST NOT define a property named 'href', as the presence of an 'href' property is the mechanism by which dCDNs detect that an object is a Link reference rather than an embedded object.
HostMatch objects MUST be evaluated in the order they appear, and the first matching HostMatch MUST be used. PathMatch objects MUST also be evaluated in order and only the first matching PathMatch applied.
If a CDN does not understand or support a GenericMetadata property that is not safe-to-redistribute, it MUST set the 'incomprehensible' flag to true before redistributing that metadata object.
If a dCDN cannot retrieve the complete set of CDNI Metadata for a User Agent request, or the metadata is stale and cannot be revalidated (e.g., uCDN unreachable or returning 4xx/5xx), the dCDN MUST NOT serve the requested content.
If a dCDN does not understand or support a mandatory-to-enforce GenericMetadata property, the dCDN MUST NOT serve the content. Non-mandatory-to-enforce metadata may be safely ignored and content served.
tCDNs MUST NOT change the value of mandatory-to-enforce or safe-to-redistribute when propagating metadata to a dCDN. Although a tCDN can set 'incomprehensible' to true, it MUST NOT change it from true to false.
The dCDN MUST use the logical AND of all ACLs (LocationACL, TimeWindowACL, ProtocolACL) to determine whether a request is allowed; a request denied by any single ACL is denied overall.
LocationACL defines geo-blocking via an ordered array of LocationRule objects pairing Footprint objects (footprint-type: ipv4cidr, ipv6cidr, asn, or countrycode) with allow/deny actions. Absent 'locations' means allow-all; non-matching footprints result in deny.
ProtocolACL restricts content delivery based on the delivery protocol via an ordered array of ProtocolRule objects pairing protocol strings (from the 'CDNI Metadata Protocol Types' registry) with allow/deny actions. Absent 'protocol-acl' means allow-all.
SourceMetadata provides the dCDN with content acquisition information as an ordered-by-preference array of Source objects, each specifying an equivalent endpoint pool, a protocol, and an optional acquisition-auth.
The Auth object is an extensible wrapper for authentication/authorization methods, carrying auth-type (CDNI Payload Type) and auth-value (typed object). No auth methods are defined in this document; they are specified separately (e.g., URI Signing).
The Cache object controls cache key generation: 'exclude-path-pattern' uses wildcard syntax to strip matching path prefixes from cache keys, and 'include-query-strings' lists which query parameters to include (empty list means ignore all query parameters).
The GenericMetadata wrapper object carries: generic-metadata-type (CDNI Payload Type string), generic-metadata-value (typed object), mandatory-to-enforce (boolean, default true), safe-to-redistribute (boolean, default true), and incomprehensible (boolean, default false).
The HostIndex object is the entry point into the CDNI Metadata hierarchy, containing an array of HostMatch objects. The dCDN retrieves the HostIndex URI via out-of-band bootstrapping configuration and uses it to discover all downstream metadata.
The Link object replaces any CDNI Metadata object with an href URI and optional type (CDNI Payload Type), enabling shared objects to be referenced rather than duplicated. A dCDN detects a Link by the presence of the 'href' property.
TimeWindowACL defines time-based access restrictions via an ordered array of TimeWindowRule objects, each pairing TimeWindow objects (UNIX epoch integer start/end) with allow/deny actions. Absent 'times' means allow-all; non-matching windows result in deny.
This document creates the 'CDNI Metadata Footprint Types' registry with four initial values: 'ipv4cidr', 'ipv6cidr', 'asn', and 'countrycode'. New entries require IETF Review or IESG Approval.
This document creates the 'CDNI Metadata Protocol Types' registry with 'http/1.1' as the initial value for plaintext HTTP/1.1 delivery and acquisition. HTTP/2 and HTTPS variants require separate registration before use.
This document registers 20 new CDNI Payload Types in the 'CDNI Payload Types' registry under the 'MI.' namespace, covering all structural objects (MI.HostIndex, MI.HostMatch, MI.HostMetadata, MI.PathMatch, MI.PatternMatch, MI.PathMetadata) and GenericMetadata objects (MI.SourceMetadata, MI.LocationACL, MI.TimeWindowACL, MI.ProtocolACL, MI.DeliveryAuthorization, MI.Cache, MI.Auth, MI.Grouping, and associated sub-object types).
CDNI Metadata may contain sensitive content policy information (geo-blocking rules, ACLs, origin server addresses, authorization keys) and SHOULD be protected for confidentiality. The CDNI Metadata interface SHOULD be secured using TLS.
The CDNI Metadata interface must be secured to ensure mutual authentication of uCDN and dCDN peers and integrity of exchanged metadata. Unauthenticated or tampered metadata could cause a dCDN to misserve content, violate content policies, or disclose sensitive policy information.
Footprint values use four string encodings: IPv4CIDR (e.g., '192.0.2.0/24'), IPv6CIDR per RFC 5952 (e.g., '2001:db8::/32'), ASN prefixed with lowercase 'as' (e.g., 'as64496'), and Country Code as ISO 3166-1 alpha-2 lowercase (e.g., 'us').
The PatternMatch pattern string uses '*' to match any sequence of pchar or '/' characters and '?' to match exactly one pchar; literals '$', '*', and '?' MUST be escaped as '$$', '$*', and '$?'. Default matching is case-insensitive.