draft-ietf-cdni-metadata-06.txt   draft-ietf-cdni-metadata-07.txt 
Network Working Group B. Niven-Jenkins Network Working Group B. Niven-Jenkins
Internet-Draft R. Murray Internet-Draft R. Murray
Intended status: Standards Track G. Watson Intended status: Standards Track Velocix (Alcatel-Lucent)
Expires: August 18, 2014 Velocix (Alcatel-Lucent) Expires: January 3, 2015 M. Caulfield
M. Caulfield
K. Leung K. Leung
Cisco Systems Cisco Systems
K. Ma K. Ma
Azuki Systems, Inc. Ericsson
February 14, 2014 July 2, 2014
CDN Interconnect Metadata CDN Interconnection Metadata
draft-ietf-cdni-metadata-06 draft-ietf-cdni-metadata-07
Abstract Abstract
The CDNI Metadata Interface enables interconnected CDNs to exchange The CDNI Metadata interface enables interconnected CDNs to exchange
content distribution metadata in order to enable content acquisition content distribution metadata in order to enable content acquisition
and delivery. The CDNI metadata associated with a piece of content and delivery. The CDNI metadata associated with a piece of content
provides a downstream CDN with sufficient information for the provides a downstream CDN with sufficient information for the
downstream CDN to service content requests on behalf of an upstream downstream CDN to service content requests on behalf of an upstream
CDN. This document describes both the core set of CDNI metadata and CDN. This document describes both a base set of CDNI metadata and
the protocol for exchanging that metadata. the protocol for exchanging that metadata.
Requirements Language Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119]. document are to be interpreted as described in RFC 2119 [RFC2119].
Status of This Memo Status of This Memo
skipping to change at page 1, line 48 skipping to change at page 1, line 47
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 18, 2014. This Internet-Draft will expire on January 3, 2015.
Copyright Notice Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the Copyright (c) 2014 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
2. Design Principles . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Supported Metadata Capabilities . . . . . . . . . . . . . 4
3. CDNI Metadata Data Model . . . . . . . . . . . . . . . . . . 5 2. Design Principles . . . . . . . . . . . . . . . . . . . . . . 5
3.1. HostIndex, HostMetadata & PathMetadata objects . . . . . 6 3. CDNI Metadata Data Model . . . . . . . . . . . . . . . . . . 6
3.2. Generic CDNI Metadata Object Properties . . . . . . . . . 9 3.1. HostIndex, HostMetadata and PathMetadata objects . . . . 7
3.3. Metadata Inheritance and Override . . . . . . . . . . . . 10 3.2. Generic CDNI Metadata Object Properties . . . . . . . . . 11
3.4. Metadata Naming . . . . . . . . . . . . . . . . . . . . . 11 3.3. Metadata Inheritance and Override . . . . . . . . . . . . 14
4. Encoding-Independent CDNI Metadata Object Descriptions . . . 11 4. Encoding-Independent CDNI Metadata Object Descriptions . . . 15
4.1. CDNI Metadata Structural Object Descriptions . . . . . . 11 4.1. Descriptions of the CDNI Structural Metadata Objects . . 16
4.1.1. HostIndex . . . . . . . . . . . . . . . . . . . . . . 12 4.1.1. HostIndex . . . . . . . . . . . . . . . . . . . . . . 16
4.1.2. HostMatch . . . . . . . . . . . . . . . . . . . . . . 12 4.1.2. HostMatch . . . . . . . . . . . . . . . . . . . . . . 16
4.1.3. HostMetadata . . . . . . . . . . . . . . . . . . . . 12 4.1.3. HostMetadata . . . . . . . . . . . . . . . . . . . . 17
4.1.4. PathMatch . . . . . . . . . . . . . . . . . . . . . . 13 4.1.4. PathMatch . . . . . . . . . . . . . . . . . . . . . . 17
4.1.5. PathMetadata . . . . . . . . . . . . . . . . . . . . 13 4.1.5. PathMetadata . . . . . . . . . . . . . . . . . . . . 18
4.1.6. PatternMatch . . . . . . . . . . . . . . . . . . . . 14 4.1.6. PatternMatch . . . . . . . . . . . . . . . . . . . . 18
4.1.7. GenericMetadata . . . . . . . . . . . . . . . . . . . 15 4.1.7. GenericMetadata . . . . . . . . . . . . . . . . . . . 19
4.2. CDNI Metadata Property Object Descriptions . . . . . . . 16 4.2. Description of the CDNI Generic Metadata Objects . . . . 20
4.2.1. Source Metadata . . . . . . . . . . . . . . . . . . . 16 4.2.1. Source Metadata . . . . . . . . . . . . . . . . . . . 20
4.2.1.1. Source . . . . . . . . . . . . . . . . . . . . . 16 4.2.1.1. Source . . . . . . . . . . . . . . . . . . . . . 21
4.2.2. LocationACL Metadata . . . . . . . . . . . . . . . . 17 4.2.2. LocationACL Metadata . . . . . . . . . . . . . . . . 21
4.2.2.1. LocationRule . . . . . . . . . . . . . . . . . . 17 4.2.2.1. LocationRule . . . . . . . . . . . . . . . . . . 22
4.2.2.2. Footprint . . . . . . . . . . . . . . . . . . . . 18 4.2.2.2. Footprint . . . . . . . . . . . . . . . . . . . . 22
4.2.3. TimeWindowACL Metadata . . . . . . . . . . . . . . . 18 4.2.3. TimeWindowACL Metadata . . . . . . . . . . . . . . . 23
4.2.3.1. TimeWindowRule . . . . . . . . . . . . . . . . . 18 4.2.3.1. TimeWindowRule . . . . . . . . . . . . . . . . . 23
4.2.3.2. TimeWindow . . . . . . . . . . . . . . . . . . . 19 4.2.3.2. TimeWindow . . . . . . . . . . . . . . . . . . . 24
4.2.4. ProtocolACL Metadata . . . . . . . . . . . . . . . . 19 4.2.4. ProtocolACL Metadata . . . . . . . . . . . . . . . . 24
4.2.4.1. ProtocolRule . . . . . . . . . . . . . . . . . . 20 4.2.4.1. ProtocolRule . . . . . . . . . . . . . . . . . . 24
4.2.5. Authorization Metadata . . . . . . . . . . . . . . . 20 4.2.5. Authorization Metadata . . . . . . . . . . . . . . . 25
4.2.6. Auth . . . . . . . . . . . . . . . . . . . . . . . . 21 4.2.6. Auth . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.6.1. Credentials Auth Type . . . . . . . . . . . . . . 21 4.2.6.1. Credentials Auth Type . . . . . . . . . . . . . . 26
4.2.7. Cache . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2.7. Cache . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.8. Grouping . . . . . . . . . . . . . . . . . . . . . . 22 4.2.8. Grouping . . . . . . . . . . . . . . . . . . . . . . 26
4.3. CDNI Metadata Simple Data Type Descriptions . . . . . . . 22 4.3. CDNI Metadata Simple Data Type Descriptions . . . . . . . 27
4.3.1. Link . . . . . . . . . . . . . . . . . . . . . . . . 23 4.3.1. Link . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.2. Protocol . . . . . . . . . . . . . . . . . . . . . . 23 4.3.2. Protocol . . . . . . . . . . . . . . . . . . . . . . 28
4.3.3. Endpoint . . . . . . . . . . . . . . . . . . . . . . 23 4.3.3. Endpoint . . . . . . . . . . . . . . . . . . . . . . 28
4.3.4. URI . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.3.4. URI . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.5. Time . . . . . . . . . . . . . . . . . . . . . . . . 24 4.3.5. Time . . . . . . . . . . . . . . . . . . . . . . . . 28
5. CDNI Metadata Capabilities . . . . . . . . . . . . . . . . . 24 5. CDNI Metadata Capabilities . . . . . . . . . . . . . . . . . 28
5.1. Protocol ACL Capabilities . . . . . . . . . . . . . . . . 24 5.1. Protocol ACL Capabilities . . . . . . . . . . . . . . . . 29
5.2. Authorization Metadata Capabilities . . . . . . . . . . . 25 5.2. Authorization Metadata Capabilities . . . . . . . . . . . 29
6. CDNI Metadata interface . . . . . . . . . . . . . . . . . . . 25 6. CDNI Metadata interface . . . . . . . . . . . . . . . . . . . 29
6.1. Transport . . . . . . . . . . . . . . . . . . . . . . . . 26 6.1. Transport . . . . . . . . . . . . . . . . . . . . . . . . 30
6.2. Retrieval of CDNI Metadata resources . . . . . . . . . . 26 6.2. Retrieval of CDNI Metadata resources . . . . . . . . . . 31
6.3. Bootstrapping . . . . . . . . . . . . . . . . . . . . . . 27 6.3. Bootstrapping . . . . . . . . . . . . . . . . . . . . . . 32
6.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 27 6.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 32
6.4.1. MIME Media Types . . . . . . . . . . . . . . . . . . 28 6.4.1. MIME Media Types . . . . . . . . . . . . . . . . . . 33
6.4.2. JSON Encoding of Objects . . . . . . . . . . . . . . 28 6.4.2. JSON Encoding of Objects . . . . . . . . . . . . . . 33
6.4.2.1. JSON Example . . . . . . . . . . . . . . . . . . 29 6.4.2.1. Encoded CDNI Metadata Example . . . . . . . . . . 34
6.5. Extensibility . . . . . . . . . . . . . . . . . . . . . . 33 6.5. Extensibility . . . . . . . . . . . . . . . . . . . . . . 38
6.5.1. Metadata Enforcement . . . . . . . . . . . . . . . . 33 6.5.1. Metadata Enforcement . . . . . . . . . . . . . . . . 38
6.5.2. Metadata Override . . . . . . . . . . . . . . . . . . 34 6.5.2. Metadata Override . . . . . . . . . . . . . . . . . . 39
6.6. Versioning . . . . . . . . . . . . . . . . . . . . . . . 34 6.6. Versioning . . . . . . . . . . . . . . . . . . . . . . . 39
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40
7.1. GenericMetadata Type Registry . . . . . . . . . . . . . . 35 7.1. GenericMetadata Type Registry . . . . . . . . . . . . . . 40
7.1.1. GenericMetadata Sub-Registries . . . . . . . . . . . 36 7.1.1. GenericMetadata Sub-Registries . . . . . . . . . . . 42
7.1.1.1. Footprint Sub-Registry . . . . . . . . . . . . . 36 7.1.1.1. Footprint Sub-Registry . . . . . . . . . . . . . 42
7.1.1.2. Protocol Sub-Registry . . . . . . . . . . . . . . 37 7.1.1.2. Protocol Sub-Registry . . . . . . . . . . . . . . 42
7.1.1.3. Authentication Sub-Registry . . . . . . . . . . . 38 7.1.1.3. Authentication Sub-Registry . . . . . . . . . . . 43
8. Security Considerations . . . . . . . . . . . . . . . . . . . 39 8. Security Considerations . . . . . . . . . . . . . . . . . . . 44
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 10. Contributing Authors . . . . . . . . . . . . . . . . . . . . 44
10.1. Normative References . . . . . . . . . . . . . . . . . . 39 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 45
10.2. Informative References . . . . . . . . . . . . . . . . . 40 11.1. Normative References . . . . . . . . . . . . . . . . . . 45
Appendix A. Relationship to the CDNI Requirements . . . . . . . 40 11.2. Informative References . . . . . . . . . . . . . . . . . 45
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46
1. Introduction 1. Introduction
CDNI enables a downstream CDN to service content requests on behalf Content Delivery Networks Interconnection (CDNI) ([RFC6707]) enables
of an upstream CDN. The CDNI metadata associated with a piece of a downstream CDN to service content requests on behalf of an upstream
content (or with a set of contents) provides a downstream CDN with
sufficient information for servicing content requests on behalf of an
upstream CDN in accordance with the policies defined by the upstream
CDN. CDN.
The CDNI Metadata Interface is introduced by [RFC6707] along with The CDNI Metadata interface is discussed in [I-D.ietf-cdni-framework]
three other interfaces that may be used to compose a CDNI solution along with four other interfaces that may be used to compose a CDNI
(Control, Request Routing and Logging). [I-D.ietf-cdni-framework] solution (CDNI Control interface, CDNI Request Routing Redirection
expands on the information provided in [RFC6707] and describes each interface, CDNI Footprint & Capabilities Advertisement interface and
interface, and the relationships between them, in more detail. The CDNI Logging interface). [I-D.ietf-cdni-framework] describes each
requirements for the CDNI metadata interface are specified in interface, and the relationships between them. The requirements for
the CDNI metadata interface are specified in
[I-D.ietf-cdni-requirements]. [I-D.ietf-cdni-requirements].
The CDNI metadata associated with a piece of content (or with a set
of content) provides a downstream CDN with sufficient information for
servicing content requests on behalf of an upstream CDN in accordance
with the policies defined by the upstream CDN.
This document focuses on the CDNI Metadata interface which enables a This document focuses on the CDNI Metadata interface which enables a
downstream CDN to obtain CDNI Metadata from an upstream CDN so that downstream CDN to obtain CDNI Metadata from an upstream CDN so that
the downstream CDN can properly process and respond to: the downstream CDN can properly process and respond to:
o Redirection Requests received over the CDNI Request Routing o Redirection requests received over the CDNI Request Routing
protocol. Redirection interface.
o Content Requests received directly from User Agents. o Content requests received directly from User Agents.
Specifically, this document proposes: Specifically, this document specifies:
o A data structure for mapping content requests to CDNI Metadata o A data structure for mapping content requests and redirection
properties (Section 3). requests to CDNI Metadata objects (Section 3 and Section 4.1).
o An initial set of CDNI Metadata properties (Section 4.2). o An initial set of CDNI Generic Metadata objects (Section 4.2).
o A RESTful web service for the transfer of CDNI Metadata o A RESTful web service for the transfer of CDNI Metadata
(Section 6). (Section 6).
1.1. Terminology 1.1. Terminology
This document reuses the terminology defined in [RFC6707]. This document reuses the terminology defined in [RFC6707].
Additionally, the following terms are used throughout this document Additionally, the following terms are used throughout this document
and are defined as follows: and are defined as follows:
o Object - a collection of properties o Object - a collection of properties
o Property - a key and value pair where the key is a property name o Property - a key and value pair where the key is a property name
and the value is the property value or an object. and the value is the property value or an object.
1.2. Supported Metadata Capabilities
Only the metadata for a small set of initial capabilities is
specified in this document. This set provides the minimum amount of
metadata for basic CDN interoperability while still meeting the
requirements set forth by [I-D.ietf-cdni-requirements].
The following high-level functionality is configured via the metadata
described in Section 4:
o Acquisition Source: Metadata for allowing a dCDN to fetch content
from a uCDN.
o Delivery Access Control: Metadata for restricting (or permitting)
access to content based on any of the following factors:
* Location
* Time Window
* Delivery Protocol
o Delivery Authorization: Metadata for authorizing dCDN user agent
requests.
o Cache Control: Metadata for controlling cache behavior of the
dCDN.
The metadata encoding described by this document is extensible in
order allow for future additions to this list.
This document supports HTTPv1.1 for delivery and both HTTPv1.1 and
HTTPv1.1. over TLS for acquisition. All metadata is described in a
protocol-agnostic manner.
Supporting unencrypted HTTPv2.0 for delivery (or unencrypted HTTPv2.0
or HTTPv2.0 over TLS for acquisition) only requires the registration
of these protocol names in the CDNI Metadata Protocol Sub-Registry.
Supporting HTTPv1.1 over TLS or HTTPv2.0 over TLS for delivery
requires specifying additional metadata objects to carry the
properties required to establish a TLS session, for example metadata
to describe the certificate to present as part of the TLS handshake.
2. Design Principles 2. Design Principles
The proposed CDNI Metadata Interface was designed to achieve the The CDNI Metadata interface was designed to achieve the following
following objectives: objectives:
1. Cacheability of CDNI metadata objects 1. Cacheability of CDNI metadata objects.
2. Deterministic mapping from redirection and content requests to 2. Deterministic mapping from redirection requests and content
CDNI metadata properties requests to CDNI metadata properties.
3. Support for DNS redirection as well as application-specific 3. Support for DNS redirection as well as application-specific
redirection (for example HTTP redirection) redirection (for example HTTP redirection).
4. Minimal duplication of CDNI metadata 4. Minimal duplication of CDNI metadata.
5. Leverage existing protocols 5. Leveraging of existing protocols.
Cacheability improves the latency of acquiring metadata while Cacheability improves the latency of acquiring metadata while
maintaining its freshness and therefore improves the latency of maintaining its freshness, and therefore improves the latency of
serving content requests. The CDNI Metadata Interface uses HTTP to serving content requests and redirection requests, without
achieve cacheability. sacrificing accuracy. The CDNI Metadata interface uses HTTP and its
existing caching mechanisms to achieve CDNI metadata cacheability.
Deterministic mappings from content to metadata properties eliminates Deterministic mappings from content to metadata properties eliminates
ambiguity and ensures that policies are applied consistently by all ambiguity and ensures that policies are applied consistently by all
downstream CDNs. downstream CDNs.
Support for both HTTP and DNS redirection ensures that the CDNI Support for both HTTP and DNS redirection ensures that the CDNI
Metadata Interface can be used for HTTP and DNS redirection and also Metadata interface can be used for HTTP and DNS redirection and also
meets the same design principles for both HTTP and DNS based meets the same design principles for both HTTP and DNS based
redirection schemes. redirection schemes.
Minimal duplication of CDNI metadata provides space efficiency on Minimal duplication of CDNI metadata provides space efficiency on
storage in the CDNs, on caches in the network, and across the network storage in the CDNs, on caches in the network, and across the network
between CDNs. between CDNs.
Leveraging existing protocols avoids reinventing common mechanisms Leveraging existing protocols avoids reinventing common mechanisms
such as data structure encoding (e.g. XML, JSON) and data transport such as data structure encoding (e.g. XML, JSON) and data transport
(e.g. HTTP). (e.g. HTTP).
3. CDNI Metadata Data Model 3. CDNI Metadata Data Model
The CDNI Metadata Model describes a data structure for mapping The CDNI Metadata Model describes a data structure for mapping
redirection requests and content requests to metadata properties. redirection requests and content requests to metadata properties.
Metadata properties describe how to acquire content from an upstream Metadata properties describe how to acquire content from an upstream
CDN, authorize access to content, and deliver content from a CDN, authorize access to content, and deliver content from a
downstream CDN. The data model relies on the assumption that these downstream CDN. The data model relies on the assumption that these
metadata properties may be aggregated based on the hostname of the metadata properties may be aggregated based on the hostname of the
content and subsequently on the resource path of the content. The content and subsequently on the resource path of the content. The
skipping to change at page 6, line 21 skipping to change at page 7, line 22
different policies configured to express geo-blocking rules, it is different policies configured to express geo-blocking rules, it is
likely that a single geo-blocking policy would be applied to multiple likely that a single geo-blocking policy would be applied to multiple
Hostnames delivered through the CDN. Hostnames delivered through the CDN.
In order to enable the CDNI Metadata for a given Hostname or URI Path In order to enable the CDNI Metadata for a given Hostname or URI Path
to be decomposed into sets of CDNI Metadata properties that can be to be decomposed into sets of CDNI Metadata properties that can be
reused by multiple Hostnames and URI Paths, the CDNI Metadata reused by multiple Hostnames and URI Paths, the CDNI Metadata
interface specified in this document splits the CDNI Metadata into a interface specified in this document splits the CDNI Metadata into a
number of objects. Efficiency is improved by enabling a single CDNI number of objects. Efficiency is improved by enabling a single CDNI
Metadata object (that is shared across Hostname and/or URI paths) to Metadata object (that is shared across Hostname and/or URI paths) to
be retrieved by a dCDN once, even if it is referenced by the CDNI be retrieved and stored by a dCDN once, even if it is referenced by
Metadata of multiple Hostnames. the CDNI Metadata of multiple Hostnames or of multiple URI paths.
Section 3.1 introduces a high level description of the HostIndex, Section 3.1 introduces a high level description of the HostIndex,
HostMetadata and PathMetadata objects and describes the relationships HostMetadata and PathMetadata objects and describes the relationships
between those objects. between those objects.
Section 3.2 introduces a high level description of the CDNI Section 3.2 introduces a high level description of the CDNI
GenericMetadata object which represents the level at which CDNI GenericMetadata object which represents the level at which CDNI
Metadata override occurs between HostMetadata and PathMetadata Metadata override occurs between HostMetadata and PathMetadata
objects. objects.
Section 4 describes in detail the specific CDNI Metadata objects and Section 4 describes in detail the specific CDNI Metadata objects and
properties which may be contained within a CDNI GenericMetadata properties which may be contained within a CDNI GenericMetadata
object. object.
3.1. HostIndex, HostMetadata & PathMetadata objects 3.1. HostIndex, HostMetadata and PathMetadata objects
A HostIndex object contains a list of Hostnames (and/or IP addresses) A HostIndex object contains (or references) a list of Hostnames (and/
for which content requests may be delegated to the downstream CDN. or IP addresses) for which content requests may be delegated to the
The HostIndex is the starting point for accessing the uCDN's CDNI downstream CDN. The HostIndex is the starting point for accessing
Metadata data store. It enables surrogates in the dCDN to the uCDN CDNI Metadata data store. It enables the dCDN to
deterministically discover, on receipt of a User Agent request for deterministically discover, on receipt of a User Agent request for
content, which other CDNI Metadata objects it requires in order to content, which other CDNI Metadata objects it requires in order to
deliver the requested content. deliver the requested content.
The HostIndex links Hostnames (and/or IP addresses) to HostMetadata The HostIndex links Hostnames (and/or IP addresses) to HostMetadata
objects via HostMatch objects. HostMetadata objects contain (or objects via HostMatch objects. HostMetadata objects contain (or
reference) the default CDNI Metadata required to serve content for reference) the default CDNI Metadata required to serve content for
that host. When looking up CDNI Metadata, the downstream CDN looks that host. When looking up CDNI Metadata, the downstream CDN looks
up the requested Hostname (or IP address) in the HostIndex, from up the requested Hostname (or IP address) against the HostMatch
there it can find HostMetadata which describes properties for a host entries in the HostIndex, from there it can find HostMetadata which
and PathMetadata which may override those properties for given URI describes properties for a host and PathMetadata which may override
paths within the host. those properties for given URI paths within the host.
Besides containing the default CDNI Metadata for the specified HostMetadata and PathMetadata objects may also contain PathMatch
Hostname, HostMetadata and PathMetadata objects may also contain objects which in turn contain PathMetadata objects. PathMatch
PathMatch objects which in turn contain PathMetadata objects. objects override the CDNI Metadata in the HostMetadata object or one
PathMatch objects override the CDNI Metadata in the HostMetadata or more preceding PathMetadata objects with more specific CDNI
object or one or more preceding PathMetadata objects with more Metadata that applies to content requests matching the pattern
specific CDNI Metadata that applies to content requests matching the defined in that PathMatch object.
pattern defined in that PathMatch object.
For the purposes of retrieving CDNI Metadata all other required CDNI For the purposes of retrieving CDNI Metadata, all other required CDNI
Metadata objects and their properties are discoverable from the Metadata objects and their properties are discoverable from the
appropriate HostMetadata, PathMatch and PathMetadata objects for the appropriate HostMetadata, PathMatch and PathMetadata objects for the
requested content. requested content.
The relationships between the HostIndex, HostMatch, HostMetadata, The relationships between the HostIndex, HostMatch, HostMetadata,
PathMatch and PathMetadata objects are described in Figure 1. PathMatch and PathMetadata objects are described in Figure 1.
+---------+ +---------+ +------------+ +---------+ +---------+ +------------+
|HostIndex+-(*)->|HostMatch|-(1)->|HostMetadata+-------(*)------+ |HostIndex+-(*)->|HostMatch+-(1)->|HostMetadata+-------(*)------+
+---------+ +---------+ +------+-----+ | +---------+ +---------+ +------+-----+ |
| | | |
(*) | (*) |
| | | V
(1) One and only one +---------+ ************************** --> Contains or References V ******************
(*) Zero or more +--->|PathMatch| *Generic Metadata Objects* (1) One and only one +---------+ *Generic Metadata*
| +---------+ ************************** (*) Zero or more +--->|PathMatch| * Objects *
| | ^ | +----+---++ ******************
(*) (1) | | | | ^
| | | (*) (1) (1) +------------+ |
| V | | | +->|PatternMatch| |
| +------------+ | | V +------------+ |
+--|PathMetadata+-------(*)------+ | +------------+ |
+------------+ +--+PathMetadata+-------(*)------+
+------------+
Figure 1: Relationships between the HostIndex, HostMetadata & Figure 1: Relationships between CDNI Metadata Objects (Diagram
PathMetadata CDNI Metadata Objects Representation)
The relationships in Figure 1 are summarised in Table 1 below. The relationships in Figure 1 are also represented in tabular format
in Table 1 below.
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
| Data Object | Objects it References | | Data Object | Objects it contains or references |
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
| HostIndex | 0 or more HostMatch objects. | | HostIndex | 0 or more HostMatch objects. |
| HostMatch | 1 HostMetadata object. | | HostMatch | 1 HostMetadata object. |
| HostMetadata | 0 or more PathMatch objects. 0 or more | | HostMetadata | 0 or more PathMatch objects. 0 or more |
| | GenericMetadata objects. | | | GenericMetadata objects. |
| PathMatch | 1 PathMetadata object. | | PathMatch | 1 PatternMatch object. 1 PathMetadata object. |
| PatternMatch | Does not contain or reference any other objects. |
| PathMetadata | 0 or more PathMatch objects. 0 or more | | PathMetadata | 0 or more PathMatch objects. 0 or more |
| | GenericMetadata objects. | | | GenericMetadata objects. |
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
Table 1: Relationships between CDNI Metadata Objects Table 1: Relationships between CDNI Metadata Objects
(Table Representation)
The table below describes the HostIndex, HostMetadata and The table below describes the HostIndex, HostMetadata and
PathMetadata objects in more detail. PathMetadata objects in more detail.
+-----------------+-------------------------------------------------+ +-----------------+-------------------------------------------------+
| Data Object | Description | | Data Object | Description |
+-----------------+-------------------------------------------------+ +-----------------+-------------------------------------------------+
| HostIndex | A HostIndex object lists HostMatch objects | | HostIndex | A HostIndex object lists HostMatch objects |
| HostMatch | A HostMatch object defines a hostname to match | | HostMatch | A HostMatch object defines a hostname (or IP |
| | against a requested host, and contains or | | | address) to match against a requested host, and |
| | references a HostMetadata object which contains | | | contains (or references) a HostMetadata object |
| | CDNI Metadata objects to be applied when a | | | which contains (or references) CDNI Metadata |
| | request matches against the hostname. For | | | objects to be applied when a request matches |
| | example, if "example.com" is a content | | | against the hostname. For example, if |
| | provider, a HostMatch object may include an | | | "example.com" is a content provider, a |
| | entry for "example.com" with the URI of the | | | HostMatch object may include an entry for |
| | associated HostMetadata object. | | | "example.com" with the URI of the associated |
| | HostMetadata object. |
| HostMetadata | A HostMetadata object contains (or references) | | HostMetadata | A HostMetadata object contains (or references) |
| | the default CDNI Metadata objects for content | | | the default CDNI Metadata objects for content |
| | served from that host, i.e. the CDNI Metadata | | | served from that host, i.e. the CDNI Metadata |
| | objects for content requests that do not match | | | objects for content requests that do not match |
| | any of the PathMatch objects contained or | | | any of the PathMatch objects contained (or |
| | referenced by that HostMetadata object. For | | | referenced) by that HostMetadata object. For |
| | example, a HostMetadata object may describe the | | | example, a HostMetadata object may describe the |
| | metadata properties which apply to | | | metadata properties which apply to |
| | "example.com" and may contain PathMatches for | | | "example.com" and may contain PathMatches for |
| | "example.com/movies/*" and | | | "example.com/movies/*" and |
| | "example.com/music/*" which reference | | | "example.com/music/*" which reference |
| | corresponding PathMetadata objects that contain | | | corresponding PathMetadata objects that contain |
| | the CDNI Metadata objects for those more | | | the CDNI Metadata objects for those more |
| | specific URI paths. | | | specific URI paths. |
| PathMatch | A PathMatch object defines a pattern to match | | PathMatch | A PathMatch object defines a pattern (inside a |
| | against the requested URI path, and contains or | | | PatternMatch object which PathMatch object |
| | references a PathMetadata object which contains | | | contains or references) to match against the |
| | (or references) the CDNI Metadata objects to be | | | requested URI path, and contains (or |
| | applied when a content request matches against | | | references) a PathMetadata object which |
| | the defined URI path pattern. For example, a | | | contains (or references) the CDNI Metadata |
| | PathMatch object may include a pattern for the | | | objects to be applied when a content request |
| | path "/movies/*" and may reference a | | | matches against the defined URI path pattern. |
| | PathMetadata object which contains the CDNI | | | For example, a PathMatch object may include a |
| | Metadata for content with that path. | | | PatternMatch object containing a pattern for |
| PathMetadata | A PathMetadata object contains the CDNI | | | the path "/movies/*" and may reference a |
| | GenericMetadata objects for content served with | | | PathMetadata object which contains (or |
| | the associated URI path (defined in a PathMatch | | | references) the CDNI Metadata for content with |
| | object). A PathMetadata object may also contain | | | that path. |
| | PathMatch objects in order to recursively | | PatternMatch | A PatternMatch object contains the pattern |
| | define more specific URI paths that require | | | string and flags that describe the URI path |
| | different (e.g. more specific) CDNI Metadata to | | | that a PathMatch applies to. |
| | this one. For example, the PathMetadata object | | PathMetadata | A PathMetadata object contains (or references) |
| | which applies to "example.com/movies/*" may | | | the CDNI GenericMetadata objects for content |
| | describe CDNI Metadata which apply to that | | | served with the associated URI path (defined in |
| | resource path and may contain a PathMatch | | | a PathMatch object). A PathMetadata object may |
| | object for "example.com/movies/hd/*" which | | | also contain (or reference) PathMatch objects |
| | would reference the corresponding PathMetadata | | | in order to recursively define more specific |
| | object for the "example.com/movies/hd/" path | | | URI paths that require different (e.g. more |
| | prefix. | | | specific) CDNI Metadata to this one. For |
| GenericMetadata | A GenericMetadata object contains individual | | | example, the PathMetadata object which applies |
| | CDNI Metadata objects which define the specific | | | to "example.com/movies/*" may describe CDNI |
| | policies and attributes needed to properly | | | Metadata which apply to that resource path and |
| | deliver the associated content. For example, a | | | may contain a PathMatch object for |
| | "example.com/movies/hd/*" which would reference |
| | the corresponding PathMetadata object for the |
| | "example.com/movies/hd/" path prefix. |
| GenericMetadata | A GenericMetadata object contains (or |
| | references) individual CDNI Metadata objects |
| | which define the specific policies and |
| | attributes needed to properly deliver the |
| | associated content. For example, a |
| | GenericMetadata object may describe the source | | | GenericMetadata object may describe the source |
| | from which a CDN may acquire a piece of | | | from which a CDN may acquire a piece of |
| | content. | | | content. The GenericMetadata object is an |
| | atomic unit that may be referenced by |
| | HostMetadata and/or PathMetadata objects, but |
| | SHOULD NOT contain references to other CDNI |
| | Metadata objects. The member objects of a |
| | specific CDNI Metadata object MAY be referenced |
| | by the GenericMetadata object. |
+-----------------+-------------------------------------------------+ +-----------------+-------------------------------------------------+
Table 2: HostIndex, HostMetadata and PathMetadata CDNI Metadata Table 2: HostIndex, HostMetadata and PathMetadata CDNI Metadata
Objects Objects
3.2. Generic CDNI Metadata Object Properties 3.2. Generic CDNI Metadata Object Properties
The HostMetadata and PathMetadata objects contain or can reference The HostMetadata and PathMetadata objects contain or can reference
other CDNI Metadata objects that contain properties which describe other CDNI Metadata objects that contain properties which describe
how User Agent requests for content should be processed, for example how User Agent requests for content should be processed, for example
where to acquire the content, authorization rules that should be where to acquire the content, authorization rules that should be
applied, delivery location restrictions and so on. Each such CDNI applied, delivery location restrictions and so on. Each such CDNI
skipping to change at page 9, line 51 skipping to change at page 11, line 21
how User Agent requests for content should be processed, for example how User Agent requests for content should be processed, for example
where to acquire the content, authorization rules that should be where to acquire the content, authorization rules that should be
applied, delivery location restrictions and so on. Each such CDNI applied, delivery location restrictions and so on. Each such CDNI
Metadata object is a specialization of a CDNI GenericMetadata object. Metadata object is a specialization of a CDNI GenericMetadata object.
The GenericMetadata object abstracts the basic information required The GenericMetadata object abstracts the basic information required
for Metadata override and Metadata distribution, from the specifics for Metadata override and Metadata distribution, from the specifics
of any given property (e.g., property semantics, enforcement options, of any given property (e.g., property semantics, enforcement options,
etc.). etc.).
The GenericMetadata object defines the type of properties contained The GenericMetadata object defines the type of properties contained
within it as well as whether or not the properties are mandatory to within it as well as whether or not the properties are "mandatory-to-
enforce. If the dCDN does not understand or support the property enforce". If the dCDN does not understand or support the property
type and the property type is mandatory to enforce, the dCDN MUST NOT type and the property type is "mandatory-to-enforce", the dCDN MUST
serve the content to the User Agent. If the dCDN does not understand NOT serve the content to the User Agent. If the dCDN does not
or support the property type it is also not going to be able to understand or support the property type and the property type is not
properly propagate the Metadata for cascaded distribution. If the "mandatory-to-enforce", then that GenericMetadata object may be
dCDN does not understand or support the property type and the safely ignored and the dCDN MUST process the content request in
property type is not mandatory to enforce, then the GenericMetadata accordance with the rest of the CDNI metadata.
object may be safely ignored.
Although a CDN cannot serve content to a User Agent if a mandatory Although a CDN MUST NOT serve content to a User Agent if a
property cannot be enforced, it may be safe to redistribute that "mandatory-to-enforce" property cannot be enforced, it may be "safe-
metadata to another CDN without modification. For example, in the to-redistribute" that metadata to another CDN without modification.
cascaded CDN case, a transit CDN may pass through mandatory-to- For example, in the cascaded CDN case, a transit CDN may pass through
enforce metadata to the delivery CDN. For Metadata which does not "mandatory-to-enforce" metadata to a downstream CDN. For Metadata
require customization, the data representation received off the wire which does not require customization or translation (i.e. metadata
MAY be stored and redistributed without being natively understood or that is "safe-to-redistribute"), the data representation received off
supported by the transit CDN. However, for Metadata which require the wire MAY be stored and redistributed without being natively
translations, transparent redistribution of the uCDN Metadata values understood or supported by the transit CDN.However, for Metadata
may not be appropriate. Certain Metadata may be safely, though which requires translation, transparent redistribution of the uCDN
possibly not optimially, redistributed unmodified, e.g., source Metadata values may not be appropriate. Certain Metadata may be
acquisition address may not be optimal if transparently safely, though possibly not optimally, redistributed unmodified. For
redistributed, but may still work. Redistribution safety MUST be example, source acquisition address may not be optimal if
specified for each GenericMetadata. transparently redistributed, but may still work.
Redistribution safety MUST be specified for each GenericMetadata. If
a CDN does not understand or support a given GenericMetadata property
type and the property type is not "safe-to-redistribute", before
redistributing the metadata, the CDN MUST set the "incomprehensible"
flag for the GenericMetadata property that it did not understand and
was marked as not "safe-to-redistribute". The "incomprehensible"
flag signals to a dCDN that the metadata was not properly transformed
by the transit CDN. A CDN MUST NOT attempt to use metadata that has
been marked as "incomprehensible" by a uCDN.
[[Editors' Note: Do we need to clarify what is meant by
"Redistribution safety MUST be specified"? In Section 4.1.7
(GenericMetadata) we say that StR is not Mandatory-to-Specify and
defaults to StR=True. A strict interpretation of "MUST be specified"
could be that StR is Mandatory-to-Specify and could lead to dCDNs
rejecting requests/metadata that leave it out as the default applies
which would be an issue for interop. Maybe change first sentence to
"If a GenericMetadata object cannot be redistributed safely then it
MUST be marked as not safe-to-redistribute (i.e. Safe-to-
redistribute is set to False).]]
Transit CDNs MUST NOT change the value of "mandatory-to-enforce" or
"safe-to-redistribute" when propogating metadata to a dCDN. Although
a transit CDN may set the value of "incomprehensible" to true, a
transit CDN MUST NOT change the value of "incomprehensible" from true
to false.
[[Editors' Note: Should a transit CDN be allowed to change the value
of "mandatory-to-enforce" or "safe-to-redistribute"? Changing MtE
from false to true should be safe from an enforcement perspective as
it makes delivery more restrictive? Changing StR may be ok,
depending upon what the metadata is (e.g., perhaps URL rewrite is
only needed in certain cases and the transit CDN is the one to make
that decision)? For simplicity, prohibiting transit CDNs from
changing MtE or StR seems like the simplest approach.]]
The following table describes the action to be taken by a transit CDN
(tCDN) for the different "mandatory-to-enforce" (MtE) and "safe-to-
redistribute" (StR) cases, when the tCDN either does or does not
understand the metadata in question:
+-------+-------+------------+--------------------------------------+
| MtE | StR | Metadata | Actions allowed |
| | | Understood | |
+-------+-------+------------+--------------------------------------+
| False | True | True | Can serve and redistribute. |
| False | True | False | Can serve and redistribute. |
| False | False | False | Can serve but MUST set |
| | | | "incomprehensible" to True when |
| | | | redistributing. |
| False | False | True | Can serve. Can redistribute either |
| | | | by transforming not StR metadata (if |
| | | | the CDN know how to do so safely), |
| | | | otherwise MUST set |
| | | | "incomprehensible" to True when |
| | | | redistributing. |
| True | True | True | Can serve and can redistribute. |
| True | True | False | MUST NOT serve but can redistribute. |
| True | False | True | Can serve and can redistribute. |
| True | False | False | MUST NOT serve. MUST set |
| | | | "incomprehensible" to True when |
| | | | redistributing. |
+-------+-------+------------+--------------------------------------+
The following table describes the action to be taken by a dCDN for
the different "mandatory-to-enforce" (MtE), "safe-to-redistribute"
(StR) and "incomprehensible" (Inc) cases, when the dCDN either does
or does not understand the metadata in question:
+-------+-------+------------+------------------+-------------------+
| MtE | StR | Metadata | Incomprehensible | Actions allowed |
| | | Understood | | |
+-------+-------+------------+------------------+-------------------+
| False | True | True | False | Can serve. |
| False | True | True | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| False | True | False | False | Can serve. |
| False | True | False | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| False | False | True | False | Can serve. |
| False | False | True | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| False | False | False | False | Can serve. |
| False | False | False | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| True | True | True | False | Can serve. |
| True | True | True | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| True | True | False | False | MUST NOT serve. |
| True | True | False | True | MUST NOT serve. |
| True | False | True | False | Can serve. |
| True | False | True | True | Can serve but |
| | | | | MUST NOT |
| | | | | interpret/apply |
| | | | | any metadata |
| | | | | marked |
| | | | | incomprehensible. |
| True | False | False | False | MUST NOT serve. |
| True | False | False | True | MUST NOT serve. |
+-------+-------+------------+------------------+-------------------+
3.3. Metadata Inheritance and Override 3.3. Metadata Inheritance and Override
In the data model, a HostMetadata object may contain (or reference) In the data model, a HostMetadata object may contain (or reference)
multiple PathMetadata objects (via PathMatch objects). Each multiple PathMetadata objects (via PathMatch objects). Each
PathMetadata object may in turn contain (or reference) other PathMetadata object may in turn contain (or reference) other
PathMetadata objects. HostMetadata and PathMetadata objects form an PathMetadata objects. HostMetadata and PathMetadata objects form an
inheritance tree where each node in the tree inherits or overrides inheritance tree where each node in the tree inherits or overrides
the property values set by its parent. the property values set by its parent.
GenericMetadata objects of a given type override all GenericMetadata GenericMetadata objects of a given type override all GenericMetadata
objects of the same type previously defined by any parent object in objects of the same type previously defined by any parent object in
the tree. GenericMetadata objects of a given type previously defined the tree. GenericMetadata objects of a given type previously defined
by a parent object in the tree are inherited when no object of the by a parent object in the tree are inherited when no object of the
same type is defined by the child object. For example, if same type is defined by the child object. For example, if
HostMetadata for the host "example.com" contains GenericMetadata HostMetadata for the host "example.com" contains GenericMetadata
objects of type LocationACL and TimeWindowACL, while a PathMetadata objects of type LocationACL and TimeWindowACL, while a PathMetadata
object which applies to "example.com/movies/*" defines an alternate object which applies to "example.com/movies/*" defines an alternate
GenericMetadata object of type TimeWindowACL, then: GenericMetadata object of type TimeWindowACL, then:
the TimeWindowACL defined in the PathMetadata would override the o the TimeWindowACL defined in the PathMetadata would override the
TimeWindowACL defined in the HostMetadata TimeWindowACL defined in the HostMetadata for all User Agent
requests for content under "example.com/movies", and
the LocationACL defined in the HostMetadata would be inherited for o the LocationACL defined in the HostMetadata would be inherited for
all User Agent requests for content under "example.com/movies". all User Agent requests for content under "example.com/movies".
The PathMetadata defined TimeWindowACL would override the
TimeWindowACL defined in the HostMetadata for all User Agent requests
for movies.
3.4. Metadata Naming
GenericMetadata objects are identified by their type. The type
SHOULD be descriptive, and MAY be hierarchical to support aggregating
groups of properties for the purpose of readability and for avoiding
name conflicts between vendor extensions. A dotted alpha-numeric
notation is suggested for human readability.
Metadata types defined by this document are not hierarchical.
4. Encoding-Independent CDNI Metadata Object Descriptions 4. Encoding-Independent CDNI Metadata Object Descriptions
Section 4.1 provides the definitions of each object type declared in Section 4.1 provides the definitions of each object type declared in
Section 3. These objects are described as structural objects as they Section 3. These objects are described as structural objects as they
provide the structure for the inheritance tree and identifying which provide the structure for the inheritance tree and identifying which
specific properties apply to a given User Agent content request. specific properties apply to a given User Agent content request.
Section 4.2 provides the definitions for the set of core metadata Section 4.2 provides the definitions for a base set of core metadata
objects which may be contained within a GenericMetadata object. objects which may be contained within a GenericMetadata object.
These objects are described as property objects as they define the These objects are described as property objects as they define the
semantics, enforcement options, and serialization rules for specific structure, semantics, and enforcement options for specific properties
properties. These properties govern how User Agent requests for of the metadata being described. Property objects govern how User
content are handled. Property objects may be composed of or contain Agent requests for content are handled. Property objects may be
references to other objects. In those cases the value of the composed of or contain references to other property sub-objects (i.e.
property can be either an object of that type (the object is property objects contained within or referenced by the property
embedded) or a Link object that contains a URI and relationship that object that refers to that property sub-object). In those cases the
can be dereferenced to retrieve the CDNI Metadata object that value of the property sub-objects can be either a complete serialized
represents the value of that property. representation of the sub-object, or a Link object that contains a
URI and relationship that can be dereferenced to retrieve the
complete serialized representation of the property sub-object.
Section 6.5 discusses the ability to extend the base set of metadata
objects specified in this document with additional standards based or
vendor specific property objects that may be defined in the future in
separate documents.
Downstream CDNs MUST support parsing of all CDNI metadata objects
specified in this document. A dCDN does not have to implement the
underlying functionality represented by the metadata object, which
may restrict the content which that dCDN can serve. uCDNs as
generators of CDNI Metadata only need to support generating the CDNI
metadata that they need in order to express the policies and
treatment the content they are describing requires.
Note: In the following sections, the term "mandatory-to-specify" is Note: In the following sections, the term "mandatory-to-specify" is
used to convey which objects or properties must be specified for a used to convey which property sub-objects MUST be specified for a
given parent object or property. When mandatory-to-specify is set to given structural or property object. When mandatory-to-specify is
true, it implies that if the parent object is specified, then the set to true on a sub-object, it implies that if the property object
defined object or property MUST also be specified, e.g., a HostMatch containing that property sub-object is specified, then the mandatory-
object without a host to match against does not make sense, to-specify property sub-object MUST also be specified, e.g., a
therefore, the host is mandatory-to-specify inside a parent HostMatch HostMatch property object without a host to match against does not
object. make sense, therefore, the host is mandatory-to-specify inside a
HostMatch property object.
4.1. CDNI Metadata Structural Object Descriptions 4.1. Descriptions of the CDNI Structural Metadata Objects
Each of the sub-sections below describe the structural objects Each of the sub-sections below describe the structural objects
defined in Table 2. defined in Table 2.
4.1.1. HostIndex 4.1.1. HostIndex
The HostIndex object is the entry point into the CDNI Metadata The HostIndex object is the entry point into the CDNI Metadata
hierarchy. It contains a list of HostMatch objects. An incoming hierarchy. It contains (or references) a list of HostMatch objects.
content request is matched against the hostname inside of each of the An incoming content request is matched against the hostname inside of
listed HostMatch objects to find the HostMatch object which applies each of the listed HostMatch objects to find the HostMatch object
to the request. which applies to the request.
Property: hosts Property: hosts
Description: List of HostMatch objects, in priority order. Description: List of HostMatch objects, in priority order.
Type: List of HostMatch objects Type: List of HostMatch objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.1.2. HostMatch 4.1.2. HostMatch
The HostMatch object contains a hostname or IP address to match The HostMatch object contains a hostname or IP address to match
against content requests. The HostMatch object also contains a against content requests. The HostMatch object also contains or
reference to Metadata objects to apply if a match is found. references a HostMetadata object to apply if a match is found.
Property: host Property: host
Description: String (hostname or IP address) to match against Description: String (hostname or IP address) to match against
the requested host. the requested host.
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
skipping to change at page 12, line 42 skipping to change at page 17, line 4
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: host-metadata Property: host-metadata
Description: CDNI Metadata to apply when delivering content Description: CDNI Metadata to apply when delivering content
that matches this host. that matches this host.
Type: HostMetadata Type: HostMetadata
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.1.3. HostMetadata 4.1.3. HostMetadata
The HostMetadata object contains both Metadata that applies to The HostMetadata object contains (or references) both Metadata that
content requests for a particular host and a list of pattern matches applies to content requests for a particular host and a list of
for finding more specific Metadata based on the resource path in a pattern matches for finding more specific Metadata based on the
content request. resource path in a content request.
Property: metadata Property: metadata
Description: List of host related metadata. Description: List of host related metadata.
Type: List of GenericMetadata objects Type: List of GenericMetadata objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: paths Property: paths
Description: Path specific rules. First match applies. Description: Path specific rules. Path patterns (PathMatch
objects) MUST be evaluated in the order they appear and the
first PathMatch object that matches the content request being
process is applied.
Type: List of PathMatch objects Type: List of PathMatch objects
Mandatory-to-Specify: No. Mandatory-to-Specify: No.
4.1.4. PathMatch 4.1.4. PathMatch
The PathMatch object contains an expression given as a PatternMatch The PathMatch object contains (or references) an expression given as
object to match against a resource URI path and Metadata objects to a PatternMatch object to match against a resource URI path and
apply if a match is found. Metadata objects to apply if a match is found.
Property: path-pattern Property: path-pattern
Description: Pattern to match against the requested path, i.e. Description: Pattern to match against the requested path, i.e.
against the [RFC3986] path-absolute. against the [RFC3986] path-absolute.
Type: PatternMatch Type: PatternMatch
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
skipping to change at page 13, line 44 skipping to change at page 18, line 11
Description: CDNI Metadata to apply when delivering content Description: CDNI Metadata to apply when delivering content
that matches this pattern. that matches this pattern.
Type: PathMetadata Type: PathMetadata
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.1.5. PathMetadata 4.1.5. PathMetadata
A PathMetadata object contains the CDNI Metadata properties for A PathMetadata object contains (or reference) the CDNI Metadata
content served with the associated URI path (defined in a PathMatch properties for content served with the associated URI path (defined
object). Note that if CDNI metadata is used as an input to CDNI in a PathMatch object) and possibly children PathMatch objects.
request routing and DNS-based redirection is employed, then any
metadata at the PathMetadata level or below will be inaccessible at Note that if DNS-based redirection is employed, then any metadata at
request routing time. the PathMetadata level or below will be inaccessible at request
routing time because only the content request hostname is available
at request routing time.
Property: metadata Property: metadata
Description: List of path related metadata. Description: List of path related metadata.
Type: List of GenericMetadata objects Type: List of GenericMetadata objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: paths Property: paths
Description: Path specific rules. First match applies. Description: Path specific rules. First match applies.
skipping to change at page 15, line 4 skipping to change at page 19, line 21
Mandatory-to-Specify: No. Default is case-insensitive match. Mandatory-to-Specify: No. Default is case-insensitive match.
Property: ignore-query-string Property: ignore-query-string
Description: List of query parameters which should be ignored Description: List of query parameters which should be ignored
when searching for a pattern match. If all query parameters when searching for a pattern match. If all query parameters
should be ignored then the list MUST be empty. should be ignored then the list MUST be empty.
Type: List of String Type: List of String
Mandatory-to-Specify: No. Default is to include query strings Mandatory-to-Specify: No. Default is to include query strings
when matching. when matching.
4.1.7. GenericMetadata 4.1.7. GenericMetadata
A GenericMetadata object is a abstraction for managing individual A GenericMetadata object is an abstraction for managing individual
CDNI Metadata properties in an opaque manner. CDNI Metadata properties in an opaque manner.
Property: type Property: generic-metadata-type
Description: CDNI Metadata property object type. Description: CDNI Metadata property object type.
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: value Property: generic-metadata-value
Description: CDNI Metadata property object. Description: CDNI Metadata property object.
Type: matches the type property above Type: Format/Type is defined by the value of generic-metadata-
type property above.
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: mandatory-to-enforce Property: mandatory-to-enforce
Description: Flag identifying whether or not the enforcement of Description: Flag identifying whether or not the enforcement of
the property Metadata is required. the property Metadata is required.
Type: Boolean Type: Boolean
Mandatory-to-Specify: No. Default is to treat metadata as Mandatory-to-Specify: No. Default is to treat metadata as
mandatory to enforce. mandatory to enforce.
Property: safe-to-redistribute Property: safe-to-redistribute
Description: Flag identifying whether or not the property Description: Flag identifying whether or not the property
Metadata may be safely redistributed without modification. Metadata may be safely redistributed without modification.
Type: Boolean Type: Boolean
skipping to change at page 16, line 5 skipping to change at page 20, line 17
Property: safe-to-redistribute Property: safe-to-redistribute
Description: Flag identifying whether or not the property Description: Flag identifying whether or not the property
Metadata may be safely redistributed without modification. Metadata may be safely redistributed without modification.
Type: Boolean Type: Boolean
Mandatory-to-Specify: No. Default is allow transparent Mandatory-to-Specify: No. Default is allow transparent
redistribution. redistribution.
4.2. CDNI Metadata Property Object Descriptions 4.2. Description of the CDNI Generic Metadata Objects
The property objects defined below are intended to be used in the The property objects defined below are intended to be used in the
GenericMetadata object value field as defined in Section 4.1.7. All GenericMetadata object generic-metadata-value field as defined in
of the objects defined below are considered both mandatory to enforce Section 4.1.7 and their generic-metadata-type property MUST be set to
and safe to redistribute. the appropriate Media Type as defined in [[REF]].
[[Editors' note: We don't specify media types for the Generic
Metadata object we define anywhere. Need to do that - at a minimum
in the IANA section, but should we introduce/explain them elsewhere
in the document too?]]
4.2.1. Source Metadata 4.2.1. Source Metadata
Source Metadata provides the dCDN information about content Source Metadata provides the dCDN information about content
acquisition e.g. how to contact an uCDN Surrogate or an Origin Server acquisition e.g. how to contact an uCDN Surrogate or an Origin Server
to obtain the content to be served. The sources are not necessarily to obtain the content to be served. The sources are not necessarily
the actual Origin Servers operated by the CSP but might be a set of the actual Origin Servers operated by the CSP but might be a set of
Surrogates in the uCDN. Surrogates in the uCDN.
Endpoints within a source should be treated as equivalent/equal so
one can specify a list of sources in preference order and for each
source/preference rank one can specify a list of endpoints that are
equivalent, e.g. a pool of servers that are not behind a load
balancer.
Property: sources Property: sources
Description: Sources from which the dCDN can acquire content, Description: Sources from which the dCDN can acquire content,
listed in priority order. listed in order of preference.
Type: List of Source objects Type: List of Source objects
Mandatory-to-Specify: No. Default is to use static Mandatory-to-Specify: No. Default is to use static
configuration, out of band of the metadata interface. configuration, out of band of the metadata interface.
4.2.1.1. Source 4.2.1.1. Source
A Source object describes the Source which should be used by the dCDN A Source object describes the Source which should be used by the dCDN
for content acquisition, e.g. a Surrogate within the uCDN or an for content acquisition, e.g. a Surrogate within the uCDN or an
skipping to change at page 16, line 50 skipping to change at page 21, line 25
content from this source. content from this source.
Type: Auth Type: Auth
Mandatory-to-Specify: No. Default is no authentication is Mandatory-to-Specify: No. Default is no authentication is
required. required.
Property: endpoints Property: endpoints
Description: Origins from which the dCDN can acquire content. Description: Origins from which the dCDN can acquire content.
If multiple endpoints are specified they are all equal, i.e.
the list is not in preference order, for example a pool of
servers behind a load balancer.
Type: List of EndPoint objects Type: List of EndPoint objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: protocol Property: protocol
Description: Network retrieval protocol to use when requesting Description: Network retrieval protocol to use when requesting
content from this source. content from this source.
Type: Protocol Type: Protocol
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
skipping to change at page 17, line 19 skipping to change at page 21, line 46
content from this source. content from this source.
Type: Protocol Type: Protocol
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.2.2. LocationACL Metadata 4.2.2. LocationACL Metadata
LocationACL Metadata defines location-based restrictions. LocationACL Metadata defines location-based restrictions.
A LocationACL which does not include a locations property results in
an action of allow, meaning that delivery can be performed regardless
of the User Agent's location. The action from the first footprint to
match against the User Agent's location is the action a CDN MUST
take. If two or more footprints overlap, the first footprint that
matches against the User Agent's location determines the action a CDN
MUST take. If the locations property is included but is empty, or if
none of the listed footprints matches the User Agent's location then
the result is an action of deny.
Property: locations Property: locations
Description: Access control list which applies restrictions to Description: Description: Access control list which allows or
delivery based on client location. blocks delivery based on client location.
Type: List of LocationRule objects Type: List of LocationRule objects
Mandatory-to-Specify: No. Default is allow all locations. Mandatory-to-Specify: No. Default is allow all locations.
4.2.2.1. LocationRule 4.2.2.1. LocationRule
A LocationRule contains or references a list of Footprint objects and A LocationRule contains or references a list of Footprint objects and
the corresponding action. the corresponding action.
skipping to change at page 18, line 11 skipping to change at page 22, line 44
Type: Enumeration [allow|deny] Type: Enumeration [allow|deny]
Mandatory-to-Specify: No. Default is deny. Mandatory-to-Specify: No. Default is deny.
4.2.2.2. Footprint 4.2.2.2. Footprint
A Footprint object describes the footprint to which a LocationRule A Footprint object describes the footprint to which a LocationRule
may be applied by, e.g. an IPv4 address range or a geographic may be applied by, e.g. an IPv4 address range or a geographic
location. location.
Property: type Property: footprint-type
Description: Registered footprint type (see Section 7.1.1.1). Description: Registered footprint type (see Section 7.1.1.1).
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: value Property: footprint-value
Description: Footprint object conforming to the specification Description: Footprint object conforming to the specification
associated with the registered footprint type. associated with the registered footprint type.
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.2.3. TimeWindowACL Metadata 4.2.3. TimeWindowACL Metadata
TimeWindowACL Metadata defines time-based restrictions. TimeWindowACL Metadata defines time-based restrictions.
Property: times Property: times
Description: Access control list which applies restrictions to Description: Description: Access control list which allows or
delivery based on request time. blocks delivery based on request time.
Type: List of TimeWindowRule objects Type: List of TimeWindowRule objects
Mandatory-to-Specify: No. Default is allow all time windows. Mandatory-to-Specify: No. Default is allow all time windows.
4.2.3.1. TimeWindowRule 4.2.3.1. TimeWindowRule
A TimeWindowRule contains or references a list of TimeWindow objects A TimeWindowRule contains or references a list of TimeWindow objects
and the corresponding action. and the corresponding action.
Property: times Property: windows
Description: List of time windows to which the rule applies. Description: List of time windows to which the rule applies.
Type: List of TimeWindow objects Type: List of TimeWindow objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: action Property: action
Description: Defines whether the rule specifies time windows to Description: Defines whether the rule specifies time windows to
allow or deny. allow or deny.
Type: Enumeration [allow|deny] Type: Enumeration [allow|deny]
Mandatory-to-Specify: No. Default is deny. Mandatory-to-Specify: No. Default is deny.
4.2.3.2. TimeWindow 4.2.3.2. TimeWindow
A TimeWindow object describes a time range which may be applied by an A TimeWindow object describes a time range which may be applied by an
ACLRule, e.g. Start 09:00AM 01/01/2000 UTC End 17:00PM 01/01/2000 ACLRule, e.g. Start 09:00AM 01/01/2000 UTC End 17:00PM 01/01/2000
UTC. UTC.
Property: start Property: start
Description: The start time of the window. Description: The start time of the window.
Type: Time Type: Time
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
skipping to change at page 19, line 42 skipping to change at page 24, line 33
Type: Time Type: Time
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.2.4. ProtocolACL Metadata 4.2.4. ProtocolACL Metadata
ProtocolACL Metadata defines delivery protocol restrictions. ProtocolACL Metadata defines delivery protocol restrictions.
Property: protocols Property: protocols
Description: Access control list which applies restrictions to Description: Description: Access control list which allows or
delivery based on delivery protocol. blocks delivery based on delivery protocol.
Type: List of ProtocolRule objects Type: List of ProtocolRule objects
Mandatory-to-Specify: No. Default is allow all protocols. Mandatory-to-Specify: No. Default is allow all protocols.
4.2.4.1. ProtocolRule 4.2.4.1. ProtocolRule
A ProtocolRule contains or references a list of Protocol objects. A ProtocolRule contains or references a list of Protocol objects.
ProtocolRule objects are used to construct a ProtocolACL to apply ProtocolRule objects are used to construct a ProtocolACL to apply
restrictions to content acquisition or delivery. restrictions to content acquisition or delivery.
skipping to change at page 20, line 24 skipping to change at page 25, line 10
Type: List of protocol objects Type: List of protocol objects
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: action Property: action
Description: Defines whether the rule specifies protocols to Description: Defines whether the rule specifies protocols to
allow or deny. allow or deny.
Type: Enumeration [allow|deny]+ Type: Enumeration [allow|deny]
Mandatory-to-Specify: No. Default is allow all protocols. Mandatory-to-Specify: No. Default is allow all protocols.
Property: direction
Description: Defines whether the ProtocolRule specifies
protocols for acquisition or delivery.
Type: Enumeration [acquisition|delivery]
Mandatory-to-Specify: No. Default is to apply the rule to both
acquisition and delivery.
4.2.5. Authorization Metadata 4.2.5. Authorization Metadata
Authorization Metadata define content authorization methods. Authorization Metadata define content authorization methods.
Property: methods Property: methods
Description: Options for authenticating content requests. All Description: Options for authenticating content requests. All
options in the list are equally valid. options in the list are equally valid.
Type: List of Auth objects Type: List of Auth objects
Mandatory-to-Specify: No. Default is no authorization Mandatory-to-Specify: No. Default is no authorization
required. required.
4.2.6. Auth 4.2.6. Auth
An Auth object defines authentication and authorization methods to be An Auth object defines authentication and authorization methods to be
used during content delivery and content acquisition. used during content delivery and content acquisition.
Property: type Property: auth-type
Description: Registered Auth type (see Section 7.1.1.3). Description: Registered Auth type (see Section 7.1.1.3).
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
Property: value Property: auth-value
Description: Auth object conforming to the specification Description: Auth object conforming to the specification
associated with the registered Auth type. associated with the registered Auth type.
Type: String Type: String
Mandatory-to-Specify: Yes. Mandatory-to-Specify: Yes.
4.2.6.1. Credentials Auth Type 4.2.6.1. Credentials Auth Type
skipping to change at page 22, line 20 skipping to change at page 26, line 42
Property: ignore-query-string Property: ignore-query-string
Description: Allows a cache to ignore URI query string Description: Allows a cache to ignore URI query string
parameters while comparing URIs for equivalence. Each query parameters while comparing URIs for equivalence. Each query
parameter to ignore is specified in the list. If all query parameter to ignore is specified in the list. If all query
parameters should be ignored, then the list MUST be empty. parameters should be ignored, then the list MUST be empty.
Type: List of String Type: List of String
Mandatory-to-Specify: No. Default is to consider query string Mandatory-to-Specify: No. Default is to consider query string
parameters when comparing URIs or to rely on other properties parameters when comparing URIs.
of the Cache object.
4.2.8. Grouping 4.2.8. Grouping
A Grouping object identifies a large group of content to which this A Grouping object identifies a large group of content to which this
content belongs. content belongs.
Property: ccid Property: ccid
Description: Content Collection identifier for an application- Description: Content Collection identifier for an application-
specific purpose such as logging. specific purpose such as logging.
skipping to change at page 23, line 23 skipping to change at page 27, line 41
Property: href Property: href
Description: The URI of the of the addressable object being Description: The URI of the of the addressable object being
referenced. referenced.
Type: URI Type: URI
Mandatory-to-Specify: Yes Mandatory-to-Specify: Yes
Property: type Property: metadata-object-type
Description: The type of the object being referenced. Description: The type of the object being referenced.
Type: String Type: String
Mandatory-to-Specify: No Mandatory-to-Specify: No
4.3.2. Protocol 4.3.2. Protocol
Protocol objects are used to specify registered protocols for content Protocol objects are used to specify registered protocols for content
acquisition or delivery (see Section 7.1.1.2). acquisition or delivery (see Section 7.1.1.2).
Type: String Type: String
Mandatory-to-Specify: Yes
4.3.3. Endpoint 4.3.3. Endpoint
A hostname (with optional port) or an IP address (with optional A hostname (with optional port) or an IP address (with optional
port). port).
Note: All implementations MUST support IPv4 addresses encoded as Note: All implementations MUST support IPv4 addresses encoded as
specified by the 'IPv4address' rule in Section 3.2.2 of [RFC3986] and specified by the 'IPv4address' rule in Section 3.2.2 of [RFC3986] and
MUST support all IPv6 address formats specified in [RFC4291]. Server MUST support all IPv6 address formats specified in [RFC4291]. Server
implementations SHOULD use IPv6 address formats specified in implementations SHOULD use IPv6 address formats specified in
[RFC5952]. [RFC5952].
Type: String
4.3.4. URI 4.3.4. URI
A URI as specified in [RFC3986]. A URI as specified in [RFC3986].
Type: String
4.3.5. Time 4.3.5. Time
A time value expressed in seconds since Unix epoch in the UTC A time value expressed in seconds since Unix epoch in the UTC
timezone. timezone.
Type: Integer
5. CDNI Metadata Capabilities 5. CDNI Metadata Capabilities
CDNI Metadata is used to convey information pertaining to content CDNI Metadata is used to convey information pertaining to content
delivery from uCDN to dCDN. For optional metadata, it may be useful delivery from uCDN to dCDN. For optional metadata, it may be useful
for the uCDN to know if the dCDN supports the metadata, prior to for the uCDN to know if the dCDN supports the metadata, prior to
delegating any content requests to the dCDN. If optional-to- delegating any content requests to the dCDN. If optional-to-
implement metadata is mandatory-to-enforce and the dCDN does not implement metadata is "mandatory-to-enforce" and the dCDN does not
support it, any delegated requests for that content will fail, so support it, any delegated requests for that content will fail, so the
there is no reason to delegate those requests. Likewise, for any uCDN is likely to want to avoid delegating those requests to that
metadata which may be assigned optional values, it may be useful for dCDN. Likewise, for any metadata which may be assigned optional
the uCDN to know which values the dCDN supports, prior to delegating values, it may be useful for the uCDN to know which values the dCDN
any content requests to the dCDN. If a the optional value assigned supports, prior to delegating any content requests to the dCDN. If
to a given piece of content's metadata is not supported by the dCDN, the optional value assigned to a given piece of content's metadata is
any delegated requests for that content may fail, so there is likely not supported by the dCDN, any delegated requests for that content
no reason to delegate those requests. may fail, so again the uCDN is likely to want to avoid delegating
those requests to that dCDN.
The CDNI Footprint and Capabilities Interface provides a means of The CDNI Footprint and Capabilities Interface (FCI)
advertising capabilities from dCDN to uCDN. Support for optional [I-D.ietf-cdni-framework] provides a means of advertising
metadata and support for optional metadata values may be advertised capabilities from dCDN to uCDN. Support for optional metadata and
using the capabilities interface. This section describes the support for optional metadata values may be advertised using the FCI.
capabilities advertisement requirements for the metadata defined in
Section 4.2 This section describes the capabilities advertisement requirements
for the metadata defined in this document.
5.1. Protocol ACL Capabilities 5.1. Protocol ACL Capabilities
The ProtoclACL object contains a list of Protocol values. The dCDN The ProtoclACL object contains a list of Protocol values. The dCDN
MUST advertise which delivery protocols it supports so that the uCDN MUST advertise which delivery protocols it supports so that the uCDN
knows what type of content requests it can redirect to the dCDN. If knows what type of content requests it can redirect to the dCDN. If
the dCDN does not support a given acquisition or delivery protocol, the dCDN does not support a given acquisition or delivery protocol,
the uCDN should not delegate requests requiring those protocols to the uCDN should not delegate requests requiring those protocols to
the dCDN as the dCDN will not be able to properly acquire or deliver the dCDN as the dCDN will not be able to properly acquire or deliver
the content. the content.
skipping to change at page 25, line 11 skipping to change at page 29, line 38
other CDNs may support customized protocol adaptation. ProtocolACL other CDNs may support customized protocol adaptation. ProtocolACL
capabilities are not intended to define which combinations of capabilities are not intended to define which combinations of
protocols should be used. ProtocolACL capabilties are only intended protocols should be used. ProtocolACL capabilties are only intended
to describe which protocols the dCDN does or does not support. to describe which protocols the dCDN does or does not support.
Protocol combination restrictions are specified in the metadata Protocol combination restrictions are specified in the metadata
itself and associated with specific groups of content assets. itself and associated with specific groups of content assets.
5.2. Authorization Metadata Capabilities 5.2. Authorization Metadata Capabilities
The Authorization object contains a list of Auth values. The dCDN The Authorization object contains a list of Auth values. The dCDN
MUST advertise which authorization algorithms it supports so that the MUST advertise in its FCI capabilities which authorization types it
uCDN knows what type of content requests it can redirect to the dCDN. supports.
If the dCDN does not support a given authorization algorithm, the
uCDN should not delegate requests requiring that algorithm to the The definition of the corresponding capabilities and the protocol
dCDN as the dCDN will not be able to properly acquire the content or used to advertise them are outside the scope of this document and are
enforce delivery restrictions. expected to be specified as part of the CDNI Footprint and
Capabilities Interface.
6. CDNI Metadata interface 6. CDNI Metadata interface
This section specifies an interface to enable a Downstream CDN to This section specifies an interface to enable a Downstream CDN to
retrieve CDNI Metadata objects from an Upstream CDN. retrieve CDNI Metadata objects from an Upstream CDN.
The interface can be used by a Downstream CDN to retrieve CDNI The interface can be used by a Downstream CDN to retrieve CDNI
Metadata objects either dynamically as required by the Downstream CDN Metadata objects either
to process received requests (for example in response to receiving a
CDNI Request Routing request from an Upstream CDN or in response to o Dynamically as required by the Downstream CDN to process received
receiving a request for content from a User Agent) or in advance of requests. For example in response to a query from an Upstream CDN
being required (for example in case of prepositioned CDNI Metadata over the CDNI Request Routing Redirection interface (RI)
acquisition). [I-D.ietf-cdni-redirection] or in response to receiving a request
for content from a User Agent. Or;
o In advance of being required. For example in the case of Pre-
positioned CDNI Metadata acquisition.
The CDNI Metadata interface is built on the principles of RESTful web The CDNI Metadata interface is built on the principles of RESTful web
services. This means that requests and responses over the interface services. In particular, this means that requests and responses over
are built around the transfer of representations of hyperlinked the interface are built around the transfer of representations of
resources. A resource in the context of the CDNI Metadata interface hyperlinked resources. A resource in the context of the CDNI
is any object in the Data Model (as described in Section 3 through Metadata interface is any object in the Data Model (as described in
Section 4). Section 3 through Section 4).
In the general case a CDNI Metadata server makes each instance of an To retrieve CDNI metadata, a CDNI Metadata client (i.e. a client in
addressable CDNI Metadata object available via a unique URI that the dCDN) first makes a HTTP GET request for the URI of the HostIndex
returns a representation of that instance of that CDNI Metadata which provides the CDNI Metadata client with a list of Hostnames for
object. When an object needs to reference another addressable CDNI which the upstream CDN may delegate content delivery to the
Metadata object (for example a HostIndex object referencing a downstream CDN. The CDNI Metadata client can then obtain any other
HostMetadata object) it does so by including a link to the referenced CDNI Metadata objects by making a HTTP GET requests for any linked
object. Metadats objects it requires.
CDNI Metadata servers are free to assign whatever structure they CDNI Metadata servers (i.e. servers in the uCDN) are free to assign
desire to the URIs for CDNI Metadata objects and CDNI Metadata whatever structure they desire to the URIs for CDNI Metadata objects
clients MUST NOT make any assumptions regarding the structure of CDNI and CDNI Metadata clients MUST NOT make any assumptions regarding the
Metadata URIs or the mapping between CDNI Metadata objects and their structure of CDNI Metadata URIs or the mapping between CDNI Metadata
associated URIs. Therefore any URIs present in the examples below objects and their associated URIs. Therefore any URIs present in the
are purely illustrative and are not intended to impose a definitive examples below are purely illustrative and are not intended to impose
structure on CDNI Metadata interface implementations. a definitive structure on CDNI Metadata interface implementations.
6.1. Transport 6.1. Transport
The CDNI Metadata interface uses HTTP as the underlying protocol The CDNI Metadata interface uses HTTP as the underlying protocol
transport. transport.
The HTTP Method in the request defines the operation the request The HTTP Method in the request defines the operation the request
would like to perform. Servers implementing the CDNI Metadata would like to perform. A server implementation of the CDNI Metadata
interface MUST support the HTTP GET and HEAD methods. interface MUST support the HTTP GET and HEAD methods.
The corresponding HTTP Response returns the status of the operation The corresponding HTTP Response returns the status of the operation
in the HTTP Status Code and returns the current representation of the in the HTTP Status Code and returns the current representation of the
resource (if appropriate) in the Response Body. HTTP Responses from resource (if appropriate) in the Response Body. HTTP Responses from
servers implementing the CDNI Metadata interface that contain a servers implementing the CDNI Metadata interface that contain a
response body SHOULD include an ETag to enable validation of cached response body SHOULD include an ETag to enable validation of cached
versions of returned resources. versions of returned resources.
The CDNI Metadata interface specified in this document is a read-only The CDNI Metadata interface specified in this document is a read-only
interface. Therefore support for other HTTP methods such as PUT, interface. Therefore support for other HTTP methods such as PUT,
POST and DELETE etc. is not specified. Server implementations of POST and DELETE etc. is not specified. An server implementation of
this interface SHOULD reject all methods other than GET and HEAD. the CDNI Metadata interface SHOULD reject all methods other than GET
and HEAD.
As the CDNI Metadata interface builds on top of HTTP, CDNI Metadata As the CDNI Metadata interface builds on top of HTTP, CDNI Metadata
servers may make use of any HTTP feature when implementing the CDNI server implementations MAY make use of any HTTP feature when
Metadata interface, for example a CDNI Metadata server may make use implementing the CDNI Metadata interface, for example a CDNI Metadata
of HTTP's caching mechanisms to indicate that the returned response/ server MAY make use of HTTP's caching mechanisms to indicate that the
representation can be reused without re-contacting the CDNI Metadata returned response/representation can be reused without re-contacting
server. the CDNI Metadata server.
6.2. Retrieval of CDNI Metadata resources 6.2. Retrieval of CDNI Metadata resources
In the general case a CDNI Metadata server makes each instance of an In the general case a CDNI Metadata server makes each instance of an
addressable CDNI Metadata object available via a unique URI and addressable CDNI Metadata object available via a unique URI and
therefore in order to retrieve CDNI Metadata, a CDNI Metadata client therefore in order to retrieve CDNI Metadata, a CDNI Metadata client
first makes a HTTP GET request for the URI of the HostIndex which first makes a HTTP GET request for the URI of the HostIndex which
provides the CDNI Metadata client with a list of Hostnames for which provides the CDNI Metadata client with a list of Hostnames for which
the upstream CDN may delegate content delivery to the downstream CDN. the upstream CDN may delegate content delivery to the downstream CDN.
skipping to change at page 27, line 15 skipping to change at page 31, line 48
In order to retrieve the most specific metadata for a particular In order to retrieve the most specific metadata for a particular
request, the CDNI metadata client inspects the HostMetadata for request, the CDNI metadata client inspects the HostMetadata for
references to more specific PathMetadata objects. If any references to more specific PathMetadata objects. If any
PathMetadata match the request (and are linked rather than embedded), PathMetadata match the request (and are linked rather than embedded),
the CDNI metadata client makes another GET request for the the CDNI metadata client makes another GET request for the
PathMetadata. Each PathMetadata object may also include references PathMetadata. Each PathMetadata object may also include references
to yet more specific metadata. If this is the case, the CDNI to yet more specific metadata. If this is the case, the CDNI
metadata client continues requesting PathMetadata recursively. metadata client continues requesting PathMetadata recursively.
Where a downstream CDN is interconnected with multiple upstream CDNs, Where a downstream CDN is interconnected with multiple upstream CDNs,
the downstream CDN must decide which upstream CDN's CDNI metadata the downstream CDN needs to determine which upstream CDN's CDNI
should be used to handle a particular User Agent request. metadata should be used to handle a particular User Agent request.
When application level redirection (e.g. HTTP 302 redirects) is being When application level redirection (e.g. HTTP 302 redirects) is
used between CDNs, it is expected that the downstream CDN will be being used between CDNs, it is expected that the downstream CDN will
able to determine the upstream CDN that redirected a particular be able to determine the upstream CDN that redirected a particular
request from information contained in the received request (e.g. via request from information contained in the received request (e.g. via
the URI). With knowledge of which upstream CDN routed the request, the URI). With knowledge of which upstream CDN routed the request,
the downstream CDN can choose the correct metadata server from which the downstream CDN can choose the correct metadata server from which
to obtain the HostIndex. Note that the HostIndex served by each uCDN to obtain the HostIndex. Note that the HostIndex served by each uCDN
may be unique. may be unique.
In the case of DNS redirection there is not always sufficient In the case of DNS redirection there is not always sufficient
information carried in the DNS request from User Agents to determine information carried in the DNS request from User Agents to determine
the upstream CDN that redirected a particular request (e.g. when the upstream CDN that redirected a particular request (e.g. when
content from a given host is redirected to a given downstream CDN by content from a given host is redirected to a given downstream CDN by
more than one upstream CDN) and therefore downstream CDNs may have to more than one upstream CDN) and therefore downstream CDNs may have to
apply local policy when deciding which upstream CDN's metadata to apply local policy when deciding which upstream CDN's metadata to
apply. apply.
6.3. Bootstrapping 6.3. Bootstrapping
The URI for the HostIndex object of a given upstream CDN needs to be The URI for the HostIndex object of a given upstream CDN needs to be
either discovered by or configured in the downstream CDN. All other either configured in, or discovered by, the downstream CDN. All
objects/resources are then discoverable from the HostIndex object by other objects/resources are then discoverable from the HostIndex
following the links in the HostIndex object and the referenced object by following the links in the HostIndex object and the
HostMetadata and PathMetadata objects. referenced HostMetadata and PathMetadata objects.
If the URI for the HostIndex object is not manually configured in the If the URI for the HostIndex object is not manually configured in the
downstream CDN then the HostIndex URI could be discovered. A downstream CDN then the HostIndex URI could be discovered. A
mechanism allowing the downstream CDN to discover the URI of the mechanism allowing the downstream CDN to discover the URI of the
HostIndex is outside the scope of this document. HostIndex is outside the scope of this document.
6.4. Encoding 6.4. Encoding
Object are resources that may be: Object are resources that may be:
o Addressable, where the object is a resource that may be retrieved o Addressable, where the object is a resource that may be retrieved
or referenced via its own URI. or referenced via its own URI.
o Embedded, where the object is contained (or inlined) within a o Embedded, where the object is contained within a property of an
property of an addressable object. addressable object.
In the descriptions of objects we use the term "X contains Y" to mean In the descriptions of objects we use the term "X contains Y" to mean
either Y is directly embedded in X or that Y is linked to by X. It that Y is either directly embedded in X or is linked to by X. It is
is generally a deployment choice for the uCDN implementation to generally a deployment choice for the uCDN implementation to decide
decide when and which CDNI Metadata objects to embed and which are when and which CDNI Metadata objects to embed and which are made
separately addressable. separately addressable.
6.4.1. MIME Media Types 6.4.1. MIME Media Types
All MIME types are prefixed with "application/cdni." The MIME type All MIME types for CDNI Metadata objects are prefixed with
for each object matches the type name of that object as defined by "application/cdni.". The MIME type for each object then contains the
this document. The object type name is followed by ".v" and the object name of that object as defined by this document. The object
version number of the object type (e.g. ".v1"). Finally, the type name is followed by ".v" and the version number of the object
encoding type "+json" is appended. Table 3 lists a few examples of type (e.g. ".v1"). Finally, the encoding type "+json" is appended.
the MIME Media Type for each object (resource) that is retrievable Table 3 3 lists a few examples of the MIME Media Type for some object
through the CDNI Metadata interface. (resource) that are retrievable through the CDNI Metadata interface.
+--------------+---------------------------------------+ +--------------+---------------------------------------+
| Data Object | MIME Media Type | | Data Object | MIME Media Type |
+--------------+---------------------------------------+ +--------------+---------------------------------------+
| HostIndex | application/cdni.HostIndex.v1+json | | HostIndex | application/cdni.HostIndex.v1+json |
| HostMatch | application/cdni.HostMatch.v1+json | | HostMatch | application/cdni.HostMatch.v1+json |
| HostMetadata | application/cdni.HostMetadata.v1+json | | HostMetadata | application/cdni.HostMetadata.v1+json |
| PathMatch | application/cdni.PathMatch.v1+json | | PathMatch | application/cdni.PathMatch.v1+json |
| PathMetadata | application/cdni.PathMetadata.v1+json | | PathMetadata | application/cdni.PathMetadata.v1+json |
| Source | application/cdni.Source.v1+json | | Source | application/cdni.Source.v1+json |
| LocationACL | application/cdni.LocationACL.v1+json | | LocationACL | application/cdni.LocationACL.v1+json |
| LocationRule | application/cdni.LocationRule.v1+json | | LocationRule | application/cdni.LocationRule.v1+json |
+--------------+---------------------------------------+ +--------------+---------------------------------------+
Table 3: Example MIME Media Types for CDNI Metadata objects Table 3: Example MIME Media Types for CDNI Metadata objects
See http://www.iana.org/assignments/media-types/index.html for
reference.
6.4.2. JSON Encoding of Objects 6.4.2. JSON Encoding of Objects
CDNI Metadata objects are encoded as JSON objects containing a A CDNI Metadata objects is encoded as a JSON object containing a
dictionary of (key,value) pairs where the keys are the property names dictionary of (key,value) pairs where the keys are the property names
and the values are the associated property values. and the values are the associated property values.
The keys of the dictionary are the names of the properties associated The keys of the dictionary are the names of the properties associated
with the object and are therefore dependent on the specific object with the object and are therefore dependent on the specific object
being encoded (i.e. dependent on the MIME Media Type of the returned being encoded (i.e. dependent on the MIME Media Type of the returned
resource). Likewise, the values associated with each key are resource). Likewise, the values associated with each key are
dependent on the specific object being encoded (i.e. dependent on dependent on the specific object being encoded (i.e. dependent on
the MIME Media Type of the returned resource). the MIME Media Type of the returned resource).
Dictionary keys in JSON are case sensitive and therefore by Dictionary keys in JSON are case sensitive. By convention any
convention any dictionary key defined by this document (for example dictionary key defined by this document (for example the names of
the names of CDNI Metadata object properties) MUST be represented in CDNI Metadata object properties) MUST be represented in lowercase.
lowercase.
In addition to the properties specific to each object type, the keys In addition to the properties specified for each object type, the
defined below may be present in any object. keys defined below may be present in any object.
Key: base Key: base
Description: Provides a prefix for any relative URLs in the Description: Provides a prefix for any relative URLs in the
object. This is similar to the XML base tag [XML-BASE]. If object. This is similar to the XML base tag [XML-BASE]. If
absent, all URLs in the remainder of the document must be absent, all URLs in the remainder of the response MUST be
absolute URLs. absolute URLs.
Type: URI Type: URI
Mandatory: No Mandatory: No
Key: _links Key: _links
Description: The links of this object to other addressable Description: The links from this object to other addressable
objects. Any property may be replaced by a link to an object objects. Any property whose value is an object may be replaced
with the same type as the property it replaces. The keys of by a link to an object with the same type as the property it
the _links dictionary are the names of the properties being replaces. The keys of the _links dictionary are the names of
replaced. The values of the dictionary are Link objects with the properties being replaced. The values of the dictionary
href set to the URI of the object and type set to the MIME type are Link objects with href set to the URI of the object and
of the object being replaced. type set to the MIME type of the object being replaced.
Type: Dictionary object of Link objects Type: Dictionary object of Link objects
Mandatory: Yes Mandatory: Yes
6.4.2.1. JSON Example 6.4.2.1. Encoded CDNI Metadata Example
[[Editor's Note: We need to double-check that the example(s) below
are correct and use the latest property names/values/structures
defined in the document.]]
A downstream CDN may request the HostIndex and receive the following A downstream CDN may request the HostIndex and receive the following
object of type "application/cdni.HostIndex.v1+json": object of type "application/cdni.HostIndex.v1+json":
{ {
"hosts": [ "hosts": [
{ {
"host": "video.example.com", "host": "video.example.com",
"_links": { "_links": {
"host-metadata" : { "host-metadata" : {
"type": "application/cdni.HostMetadata.v1+json", "type": "application/cdni.HostMetadata.v1+json",
"href": "http://metadata.example.ucdn.com/video" "href": "http://metadata.ucdn.example/host1234"
} }
} }
}, },
{ {
"host": "images.example.com", "host": "images.example.com",
"_links": { "_links": {
"host-metadata" : { "host-metadata" : {
"type": "application/cdni.HostMetadata.v1+json", "type": "application/cdni.HostMetadata.v1+json",
"href": "http://metadata.example.ucdn.com/images" "href": "http://metadata.ucdn.example/host5678"
} }
} }
} }
] ]
} }
If the incoming request has a Host header with "video.example.com" If the incoming request has a Host header with "video.example.com"
then the downstream CDN would fetch the next metadata object from then the downstream CDN would fetch the next metadata object from
"http://metadata.ucdn.example.com/video" expecting a MIME type of "http://metadata.ucdn.example/host1234" expecting a MIME type of
"application/cdni.HostMetadata.v1+json": "application/cdni.HostMetadata.v1+json":
{ {
"metadata": [ "metadata": [
{ {
"type": "application/cdni.SourceMetadata.v1+json", "generic-metadata-type": "application/cdni.SourceMetadata.v1+json",
"value": { "generic-metadata-value": {
"sources": [ "sources": [
{ {
"_links": { "_links": {
"auth": { "auth": {
"type": "application/cdni.Auth.v1+json", "auth-type": "application/cdni.Auth.v1+json",
"href": "http://metadata.ucdn.example.com/auth1234" "href": "http://metadata.ucdn.example/auth1234"
} }
}, },
"endpoint": "acq1.ucdn.example.com", "endpoint": "acq1.ucdn.example",
"protocol": "ftp" "protocol": "ftp"
}, },
{ {
"_links": { "_links": {
"auth": { "auth": {
"type": "application/cdni.Auth.v1+json", "auth-type": "application/cdni.Auth.v1+json",
"href": "http://metadata.ucdn.example.com/auth1234" "href": "http://metadata.ucdn.example/auth1234"
} }
}, },
"endpoint": "acq2.ucdn.example.com", "endpoint": "acq2.ucdn.example",
"protocol": "http" "protocol": "http"
} }
] ]
} }
}, },
{ {
"type": "application/cdni.LocationACL.v1+json", "generic-metadata-type": "application/cdni.LocationACL.v1+json",
"value": { "generic-metadata-value": {
"locations": [ "locations": [
{ {
"locations": [ "locations": [
{ "iprange": "192.168.0.0/16" } {
], "footprint-type": "IPv4CIDR",
"action": "deny" "footprint-value": "192.168.0.0/16"
} }
] ],
} "action": "deny"
}, }
{ ]
"type": "application/cdni.ProtocolACL.v1+json", }
"value": { },
"protocols": [ {
{ "generic-metadata-type": "application/cdni.ProtocolACL.v1+json",
"protocols": [ "generic-metadata-value": {
"ftp" "protocols": [
], {
"action": "deny" "protocols": [
} "ftp"
] ],
} "action": "deny"
} }
], ]
"paths": [ }
{ }
"path-pattern": { ],
"pattern": "/videos/trailers/*" "paths": [
}, {
"_links": { "path-pattern": {
"path-metadata": { "pattern": "/video/trailers/*"
"type": "application/cdni.PathMetadata.v1+json", },
"href": "http://metadata.ucdn.example.com/videos/trailers" "_links": {
} "path-metadata": {
} "type": "application/cdni.PathMetadata.v1+json",
}, "href": "http://metadata.ucdn.example/host1234/pathABC"
{
"path-pattern": {
"pattern": "/videos/movies/*"
},
"_links": {
"pathmetadata": {
"type": "application/cdni.PathMetadata.v1+json",
"href": "http://metadata.ucdn.example.com/videos/movies"
}
}
}
]
}
Suppose the path of the requested resource matches the "/video/movies }
/*" pattern, the next metadata requested would be for "http:// }
metadata.ucdn.example.com/video/movies" with an expected type of },
"application/cdni.PathMetadata.v1+json": {
"path-pattern": {
"pattern": "/video/movies/*"
},
"_links": {
"path-metadata": {
"type": "application/cdni.PathMetadata.v1+json",
"href": "http://metadata.ucdn.example/host1234/pathDCE"
}
}
}
]
}
Suppose the path of the requested resource matches the "/video/
movies/*" pattern, the next metadata requested would be for
"http://metadata.ucdn.example/host1234/movies" with an expected type
of "application/cdni.PathMetadata.v1+json":
{ {
"metadata": [], "metadata": [],
"paths": [ "paths": [
{ {
"path-pattern": { "path-pattern": {
"pattern": "/videos/movies/hd/*" "pattern": "/videos/movies/hd/*"
}, },
"_links": { "_links": {
"pathmetadata": { "pathmetadata": {
"type": "application/cdni.PathMetadata.v1+json", "type": "application/cdni.PathMetadata.v1+json",
"href": "http://metadata.ucdn.example.com/videos/movies/hd" "href":
"http://metadata.ucdn.example/host1234/pathABC/path123"
} }
} }
} }
] ]
} }
Finally, if the path of the requested resource also matches the "/ Finally, if the path of the requested resource also matches the
videos/movies/hd/*" pattern, the downstream CDN would also fetch the "/videos/movies/hd/*" pattern, the downstream CDN would also fetch
following object from "http://metadata.ucdn.example.com/videos/movies the following object from
/hd" with MIME type "application/cdni.PathMetadata.v1+json": "http://metadata.ucdn.example/host1234/movies/hd" with MIME type
"application/cdni.PathMetadata.v1+json":
{ {
"metadata": [ "metadata": [
{ {
"type": "application/cdni.TimeWindowACL.v1+json", "generic-metadata-type": "application/cdni.TimeWindowACL.v1+json",
"value": { "generic-metadata-value": {
"times": [ "times": [
"times": [ "windows": [
{ {
"start": "1213948800", "start": "1213948800",
"end": "1327393200" "end": "1327393200"
} }
], ],
"type": "allow" "action": "allow"
] ]
} }
} }
] ]
} }
6.5. Extensibility 6.5. Extensibility
The set of property Metadata may be extended with proprietary and/or The set of property Metadata may be extended with additional
custom property Metadata. The GenericMetadata object defined in (standards based or vendor specific) property Metadata. The
Section 4.1.7 allows any Metadata property to be included in either GenericMetadata object defined in Section 4.1.7 allows any Metadata
the HostMetadata or PathMetadata lists. property to be included in either the HostMetadata or PathMetadata
lists. It is expected that additional property Metadata will be
defined in the future and that the documents defining those property
Metadata will be registered in the CDNI GenericMetadata Types
registry Section 7.1.
Note: Identification of the property Metadata defining organization Note: Identification, within the type name defined for a property
in the property Metadata type decreases the possibility of property Metadata object, of the organization that defined the extension
Metadata type collision. The fully-qualified domain name of the property Metadata decreases the possibility of property Metadata type
organization in reverse order may be used for this purpose. collisions.
6.5.1. Metadata Enforcement 6.5.1. Metadata Enforcement
At any given time, the set of property Metadata supported by the uCDN At any given time, the set of property Metadata supported by the uCDN
may not match the set of property Metadata supported by the dCDN. may not match the set of property Metadata supported by the dCDN.
The uCDN may or may not know which property Metadata the dCDN The uCDN may or may not know which property Metadata the dCDN
supports. In cases where the uCDN supports Metadata that the dCDN supports.
does not, the dCDN MUST be aware of any Metadata marked as
"mandatory-to-enforce". If a CDN does not understand or is unable to
perform the functions associated with any "mandatory-to-enforce"
Metadata, the CDN MUST NOT service any requests for the corresponding
content.
Any standard which defines a new GenericMetadata Type MUST also In the cases where the uCDN supports Metadata that the dCDN does not,
define whether or not the new metadata is mandatory-to-enforce. the dCDN MUST enforce the semantics of the "mandatory-to-enforce"
property. If a dCDN does not understand or is unable to perform the
functions associated with any "mandatory-to-enforce" Metadata, the
dCDN MUST NOT service any requests for the corresponding content.
Any specification which defines a new GenericMetadata Type MUST also
define whether or not the new metadata is "mandatory-to-enforce" and
whether or not it is "safe-to-distribute".
Note: Ideally, uCDNs would not delegate content requests to a dCDN Note: Ideally, uCDNs would not delegate content requests to a dCDN
which does not support the mandatory-to-enforce Metadata associated which does not support the "mandatory-to-enforce" Metadata associated
with the content being requested. However, even if the uCDN has a with the content being requested. However, even if the uCDN has a
priori knowledge of the Metadata supported by the dCDN (e.g., via the priori knowledge of the Metadata supported by the dCDN (e.g., via the
CDNI capabilities interface or through out-of-band negotiation CDNI capabilities interface or through out-of-band negotiation
between CDN operators) Metadata support may fluctuate or be between CDN operators) Metadata support may fluctuate or be
inconsistent (e.g., due to mis-communication, mis-configuration, or inconsistent (e.g., due to mis-communication, mis-configuration, or
temporary outage). Thus, the dCDN MUST evaluate all Metadata temporary outage). Thus, the dCDN MUST always evaluate all Metadata
associated with content requests and reject any requests where associated with content requests and reject any requests where
"mandatory-to-enforce" Metadata associated with the content cannot be "mandatory-to-enforce" Metadata associated with the content cannot be
enforced. enforced.
6.5.2. Metadata Override 6.5.2. Metadata Override
It is possible that new Metadata definitions may obsolete or override It is possible that new Metadata definitions may obsolete or override
existing property Metadata (e.g., a future revision of the CDNI existing property Metadata (e.g., a future revision of the CDNI
Metadata interface may redefine the Auth Metadata or a custom vendor Metadata interface may redefine the Auth Metadata or a custom vendor
extension may implement an alternate Auth Metadata option). If extension may implement an alternate Auth Metadata option). If
skipping to change at page 34, line 41 skipping to change at page 39, line 48
that Metadata assigned to a given content do not conflict. that Metadata assigned to a given content do not conflict.
Note: Because Metadata is inherently ordered in GenericMetadata Note: Because Metadata is inherently ordered in GenericMetadata
lists, as well as in the PathMetadata hierarchy and PathMatch lists, lists, as well as in the PathMetadata hierarchy and PathMatch lists,
multiple conflicting Metadata types MAY be used, however, Metadata multiple conflicting Metadata types MAY be used, however, Metadata
hierarchies MUST ensure that independent PathMatch root objects are hierarchies MUST ensure that independent PathMatch root objects are
used to prevent ambiguous or conflicting Metadata definitions. used to prevent ambiguous or conflicting Metadata definitions.
6.6. Versioning 6.6. Versioning
The version of CDNI Metadata Structural objects is specified by the The version of CDNI Metadata Structural objects is conveyed inside
HTTP Content-Type header. Upon responding to a request for an the MIME-Type that is included in the HTTP Content-Type header. Upon
object, a metadata server MUST include a Content-Type header with the responding to a request for an object, a metadata server MUST include
MIME-type and version number of the object. HTTP requests sent to a a Content-Type header with the MIME-type containing the version
metadata server SHOULD include an Accept header with the MIME-type number of the object. HTTP requests sent to a metadata server SHOULD
and version of the expected object. Unless stated otherwise, the include an Accept header with the MIME-type (which includes the
version of each object defined by this document is version 1. For version) of the expected object. Metadata clients can specify
example: "Content-Type: application/cdni.HostIndex.v1+json". multiple MIME-types in the Accept header, for example if a metadata
client is capable of processing two different versions of the same
type of object (defined by different MIME-types) it may decide to
include both in the Accept header. The version of each object
defined by this document is version 1. For example: "Content-Type:
application/cdni.HostIndex.v1+json".
GenericMetadata objects include a "type" property which specifies the GenericMetadata objects include a "type" property which specifies the
MIME-type of the GenericMetadata value. This MIME-type should also MIME-type of the GenericMetadata value. This MIME-type should also
include a version. Any document which defines a new type of include a version. Any document which defines a new type of
GenericMetadata should specify the version number which it describes. GenericMetadata MUST specify the version number which it describes.
For example: "application/cdni.Location.v1+json". For example: "application/cdni.Location.v1+json".
7. IANA Considerations 7. IANA Considerations
This document requests the registration of the prefix "application/ This document requests the registration of the prefix "application/
cdni" MIME Media Type under the IANA MIME Media Type registry (http:/ cdni" MIME Media Type under the IANA MIME Media Type registry
/www.iana.org/assignments/media-types/index.html). (http://www.iana.org/assignments/media-types/index.html).
7.1. GenericMetadata Type Registry 7.1. GenericMetadata Type Registry
CDNI Metadata is distributed as a list of GenericMetadata objects CDNI Metadata is distributed as a list of GenericMetadata objects
which specify a type field and a type-specific value field, as which specify a type field and a type-specific value field, as
described in Section 4.1.7. In order to prevent namespace collisions described in Section 4.1.7. In order to prevent namespace collisions
for GenericMetadata object types a new IANA registry is requested for for GenericMetadata object types a new IANA registry is requested for
"CDNI GenericMetadata Types" namespace. The namespace shall be split the "CDNI GenericMetadata Types" namespace. The namespace shall be
into two partitions: standard and optional. split into two partitions: standard and optional.
The standard namespace partition is intended to contain mandatory to The standard namespace partition is intended to contain mandatory to
implement capabilities and conforms to the "IETF Review" policy as implement capabilities and conforms to the "IETF Review" policy as
defined in [RFC5226]. The registry contains the generic metadata defined in [RFC5226]. The registry contains the generic metadata
type name, the RFC number of the specification defining the metadata type name, the RFC number of the specification defining the metadata
type, the version number of the GenericMetadata set to which the type, the version number of the GenericMetadata set to which the
standard capability applies, and boolean values indicating whether or standard capability applies, and boolean values indicating whether or
not the new type is considered mandatory-to-enforce or safe-to- not the new type is considered "mandatory-to-enforce" or "safe-to-
redistribute (as defined in Section 4.1.7). redistribute" (as defined in Section 4.1.7).
The following table defines the initial values for the standard The following table defines the initial values for the standard
partition: partition:
+----------------+---------------+---------+------+------+ +----------------+---------------+---------+------+------+
| Type name | Specification | Version | MTE | STR | | Type name | Specification | Version | MTE | STR |
+----------------+---------------+---------+------+------+ +----------------+---------------+---------+------+------+
| SourceMetadata | RFCthis | 1 | true | true | | SourceMetadata | RFCthis | 1 | true | true |
| LocationACL | RFCthis | 1 | true | true | | LocationACL | RFCthis | 1 | true | true |
| TimeWindowACL | RFCthis | 1 | true | true | | TimeWindowACL | RFCthis | 1 | true | true |
skipping to change at page 36, line 22 skipping to change at page 41, line 39
(negative one) for non-standard GenericMetadata types. (negative one) for non-standard GenericMetadata types.
As with the initial GenericMetadata types defined in Section 4.2, As with the initial GenericMetadata types defined in Section 4.2,
future GenericMetadata type registrations will specify the future GenericMetadata type registrations will specify the
information necessary for constructing and decoding the information necessary for constructing and decoding the
GenericMetadata object. This information includes the list of GenericMetadata object. This information includes the list of
properties contained within the GenericMetadata object, and for each properties contained within the GenericMetadata object, and for each
property, the specification should include a description, a type, and property, the specification should include a description, a type, and
whether or not the given property is mandatory to specify. whether or not the given property is mandatory to specify.
Any document which defines a new GenericMetadata type MUST: Any document which defines a new GenericMetadata has to:
1. Allocate a new type in the GenericMetadata Type Registry 1. Allocate a new type in the GenericMetadata Type Registry
(Section 7). (Section 7). Generic Metadata types should be descriptive and
may be hierarchnical to support aggregating groups of properties
for the purpose of readability and for avoiding conflicts between
vendor defined extensions. A dotted alpha-numeric notation is
suggested for human readability.
2. Define the set of properties associated with the new type. 2. Define the set of properties associated with the new type.
3. For each property, define a name, description, type, and whether 3. For each property, define a name, description, type, and whether
or not the property is mandatory-to-specify. or not the property is mandatory-to-specify.
4. Specify whether or not the new type is mandatory-to-enforce (vs 4. Specify whether or not the new type is "mandatory-to-enforce" (vs
optional-to-enforce). optional-to-enforce).
5. Describe the semantics of the new type including its purpose and 5. Describe the semantics of the new type including its purpose and
example of a use case to which it applies. example of a use case to which it applies.
7.1.1. GenericMetadata Sub-Registries 7.1.1. GenericMetadata Sub-Registries
Some of the initial standard GenericMetadata objects contain Some of the initial standard GenericMetadata objects contain
enumerated types which require registration (i.e., LocationACL enumerated types which require registration (i.e., LocationACL
footprint types, ProtocolACL protocols, and Auth protocols). The footprint types, ProtocolACL protocols, and Auth protocols). The
skipping to change at page 37, line 12 skipping to change at page 42, line 34
to the "Expert Review" policy as defined in [RFC5226]. The expert to the "Expert Review" policy as defined in [RFC5226]. The expert
review should verify that new type definitions do not duplicate review should verify that new type definitions do not duplicate
existing type definitions and prevent gratuitous additions to the existing type definitions and prevent gratuitous additions to the
namespace. namespace.
The following table defines the initial Footprint type values: The following table defines the initial Footprint type values:
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
| Type name | Description | Specification | | Type name | Description | Specification |
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
| IPv4 | Single IPv4 address | RFCthis |
| IPv6 | Single IPv6 address | RFCthis |
| IPv4Range | List of contiguous IPv4 addresses | RFCthis |
| | denoted by a start address and an | |
| | end address separated by a dash | |
| | (e.g., 192.168.0.1-192.168.0.20), | |
| | inclusive. | |
| IPv6Range | List of contiguous IPv6 addresses | RFCthis |
| | denoted by a start address and an | |
| | end address separated by a dash | |
| | (e.g., fc80::0001-fc80::0014), | |
| | inclusive. | |
| IPv4CIDR | IPv4 address block using slash | RFCthis | | IPv4CIDR | IPv4 address block using slash | RFCthis |
| | prefix length notation (e.g., | | | | prefix length notation (e.g., | |
| | 192.168.0.16/28). | | | | 192.168.0.16/28). Single IP | |
| | addresses can be expressed as /32. | |
| IPv6CIDR | IPv6 address block using slash | RFCthis | | IPv6CIDR | IPv6 address block using slash | RFCthis |
| | prefix length notation (e.g., | | | | prefix length notation (e.g., | |
| | fc80::0010/124). | | | | fc80::0010/124). Single IP | |
| | addresses can be expressed as /128. | |
| ASN | Autonomous System (AS) Number | RFCthis | | ASN | Autonomous System (AS) Number | RFCthis |
| CountryCode | ISO 3166-1 alpha-2 code | RFCthis | | CountryCode | ISO 3166-1 alpha-2 code | RFCthis |
| DVDRegion | DVD Region code (i.e., integer in | RFCthis |
| | the range 0-6). | |
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
7.1.1.2. Protocol Sub-Registry 7.1.1.2. Protocol Sub-Registry
The "CDNI Metadata Protocols" namespace defines the valid Protocol The "CDNI Metadata Protocols" namespace defines the valid Protocol
object values in Section 4.3.2, used by the SourceMetadata and object values in Section 4.3.2, used by the SourceMetadata and
ProtocolACL objects. Additions to the Protocol namespace conform to ProtocolACL objects. Additions to the Protocol namespace conform to
the "Expert Review" policy as defined in [RFC5226]. The expert the "Expert Review" policy as defined in [RFC5226]. The expert
review should verify that new type definitions do not duplicate review should verify that new type definitions do not duplicate
existing type definitions and prevent gratuitous additions to the existing type definitions and prevent gratuitous additions to the
skipping to change at page 39, line 7 skipping to change at page 44, line 15
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
| Type name | Description | Specification | | Type name | Description | Specification |
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
| credentials | Simple username and password | RFCthis | | credentials | Simple username and password | RFCthis |
| | authentication as defined by | | | | authentication as defined by | |
| | Section 4.2.6.1. | | | | Section 4.2.6.1. | |
+-------------+-------------------------------------+---------------+ +-------------+-------------------------------------+---------------+
8. Security Considerations 8. Security Considerations
The CDNI Metadata Interface is expected to be secured as a function The CDNI Metadata interface is expected to be secured as a function
of the transport protocol (e.g. HTTP authentication [RFC2617], HTTPS of the transport protocol (e.g. HTTP authentication [RFC2617], HTTPS
[RFC2818], or inter-domain IPSec). [RFC2818], or inter-domain IPSec).
If a malicious metadata server is contacted by a downstream CDN, the If a malicious metadata server is contacted by a downstream CDN, the
malicious server may provide metadata to the downstream CDN which malicious server may provide metadata to the downstream CDN which
denies service for any piece of content to any user agent. The denies service for any piece of content to any user agent. The
malicious server may also provide metadata which directs a downstream malicious server may also provide metadata which directs a downstream
CDN to a malicious origin server instead of the actual origin server. CDN to a malicious origin server instead of the actual origin server.
The dCDN is expected to authenticate the server to prevent this The dCDN is expected to authenticate the server to prevent this
situation (e.g. by using HTTPS and validating the server's situation (e.g. by using HTTPS and validating the server's
certificate). certificate).
A malicious metadata client could request metadata for a piece of A malicious metadata client could request metadata for a piece of
content from an upstream CDN. The metadata information may then be content from an upstream CDN. The metadata information may then be
used to glean information regarding the uCDN or to contact an used to glean information regarding the uCDN or to contact an
upstream origin server. The uCDN is expected to authenticate client upstream origin server. The uCDN is expected to authenticate client
requests to prevent this situation. requests to prevent this situation.
9. Acknowledgements 9. Acknowledgements
The authors would like to thank David Ferguson and Francois le The authors would like to thank David Ferguson and Francois Le
Faucheur for their valuable comments and input to this document. Faucheur for their valuable comments and input to this document.
10. References 10. Contributing Authors
10.1. Normative References [RFC Editor Note: Please move the contents of this section to the
Authors' Addresses section prior to publication as an RFC.]
Grant Watson
Velocix (Alcatel-Lucent)
3 Ely Road
Milton, Cambridge CB24 6AA
UK
Email: gwatson@velocix.com
11. References
11.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A., and L. Stewart, "HTTP Leach, P., Luotonen, A., and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication", Authentication: Basic and Digest Access Authentication",
RFC 2617, June 1999. RFC 2617, June 1999.
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
skipping to change at page 40, line 8 skipping to change at page 45, line 29
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, February 2006. Architecture", RFC 4291, February 2006.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226, IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008. May 2008.
[RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6 [RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6
Address Text Representation", RFC 5952, August 2010. Address Text Representation", RFC 5952, August 2010.
10.2. Informative References 11.2. Informative References
[I-D.ietf-cdni-framework] [I-D.ietf-cdni-framework]
Peterson, L., Davie, B., and R. Brandenburg, "Framework Peterson, L., Davie, B., and R. Brandenburg, "Framework
for CDN Interconnection", draft-ietf-cdni-framework-09 for CDN Interconnection", draft-ietf-cdni-framework-14
(work in progress), January 2014. (work in progress), June 2014.
[I-D.ietf-cdni-redirection]
Niven-Jenkins, B. and R. Brandenburg, "Request Routing
Redirection Interface for CDN Interconnection", draft-
ietf-cdni-redirection-02 (work in progress), April 2014.
[I-D.ietf-cdni-requirements] [I-D.ietf-cdni-requirements]
Leung, K. and Y. Lee, "Content Distribution Network Leung, K. and Y. Lee, "Content Distribution Network
Interconnection (CDNI) Requirements", draft-ietf-cdni- Interconnection (CDNI) Requirements", draft-ietf-cdni-
requirements-17 (work in progress), January 2014. requirements-17 (work in progress), January 2014.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, RFC Resource Identifier (URI): Generic Syntax", STD 66, RFC
3986, January 2005. 3986, January 2005.
[RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content
Distribution Network Interconnection (CDNI) Problem Distribution Network Interconnection (CDNI) Problem
Statement", RFC 6707, September 2012. Statement", RFC 6707, September 2012.
[XML-BASE] [XML-BASE]
Marsh, J., Ed. and R. Tobin, Ed., "XML Base (Second Marsh, J., Ed. and R. Tobin, Ed., "XML Base (Second
Edition) - http://www.w3.org/TR/xmlbase/", January 2009. Edition) - http://www.w3.org/TR/xmlbase/", January 2009.
Appendix A. Relationship to the CDNI Requirements
Section 6 of [I-D.ietf-cdni-requirements] lists the requirements for
the CDNI Metadata Distribution interface. This section outlines
which of those requirements are met by the CDNI Metadata interface
specified in this document.
All metadata requirements are met either directly or indirectly by
the CDNI Metadata Interface described in this document, with the
clarifications or exceptions described in the following paragraphs.
Requirements related to pre-positioning of metadata are met by this
document on the assumption that other CDNI Interfaces are to be used
by the upstream CDN to trigger the pre-positioning of metadata by the
downstream CDN via the CDNI Metadata Interface. Triggering metadata
pre-positioning is beyond the scope of the CDNI Metadata interface.
However, the interface as described by this document supports pulling
metadata on-demand for the purpose of pre-positioning.
Requirement META-7 relating to modification of metadata by the
upstream CDN is met both by allowing timeouts on the cacheability of
metadata objects and by allowing other CDNI interfaces to initiate a
refetch or purge of metadata.
Requirement META-18 relating to surrogate cache behavior parameters
is supported via extensibility. However, the example parameters in
META-18 are not described in this document.
Authors' Addresses Authors' Addresses
Ben Niven-Jenkins Ben Niven-Jenkins
Velocix (Alcatel-Lucent) Velocix (Alcatel-Lucent)
3 Ely Road 3 Ely Road
Milton, Cambridge CB24 6AA Milton, Cambridge CB24 6AA
UK UK
Email: ben@velocix.com Email: ben@velocix.com
Rob Murray Rob Murray
Velocix (Alcatel-Lucent) Velocix (Alcatel-Lucent)
3 Ely Road 3 Ely Road
Milton, Cambridge CB24 6AA Milton, Cambridge CB24 6AA
UK UK
Email: rmurray@velocix.com Email: rmurray@velocix.com
Grant Watson
Velocix (Alcatel-Lucent)
3 Ely Road
Milton, Cambridge CB24 6AA
UK
Email: gwatson@velocix.com
Matt Caulfield Matt Caulfield
Cisco Systems Cisco Systems
1414 Massachusetts Avenue 1414 Massachusetts Avenue
Boxborough, MA 01719 Boxborough, MA 01719
USA USA
Phone: +1 978 936 9307 Phone: +1 978 936 9307
Email: mcaulfie@cisco.com Email: mcaulfie@cisco.com
Kent Leung Kent Leung
Cisco Systems Cisco Systems
3625 Cisco Way 3625 Cisco Way
San Jose 95134 San Jose 95134
USA USA
Phone: +1 408 526 5030 Phone: +1 408 526 5030
Email: kleung@cisco.com Email: kleung@cisco.com
Kevin J. Ma Kevin J. Ma
Azuki Systems, Inc. Ericsson
43 Nagog Park 43 Nagog Park
Acton, MA 01720 Acton, MA 01720
USA USA
Phone: +1 978-844-5100 Phone: +1 978-844-5100
Email: kevin.ma@azukisystems.com Email: kevin.j.ma@ericsson.com
 End of changes. 153 change blocks. 
609 lines changed or deleted 819 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/