draft-ietf-cdni-control-triggers-02.txt | draft-ietf-cdni-control-triggers-03.txt | |||
---|---|---|---|---|
Network Working Group R. Murray | Network Working Group R. Murray | |||
Internet-Draft B. Niven-Jenkins | Internet-Draft B. Niven-Jenkins | |||
Intended status: Standards Track Velocix (Alcatel-Lucent) | Intended status: Standards Track Velocix (Alcatel-Lucent) | |||
Expires: June 5, 2014 December 2, 2013 | Expires: January 3, 2015 July 2, 2014 | |||
CDNI Control Interface / Triggers | CDNI Control Interface / Triggers | |||
draft-ietf-cdni-control-triggers-02 | draft-ietf-cdni-control-triggers-03 | |||
Abstract | Abstract | |||
This document describes the part of the CDN Interconnect Control | This document describes the part of the CDN Interconnect Control | |||
Interface that allows a CDN to trigger activity in an interconnected | Interface that allows a CDN to trigger activity in an interconnected | |||
CDN that is configured to deliver content on its behalf. The | CDN that is configured to deliver content on its behalf. The | |||
upstream CDN can use this mechanism to request that the downstream | upstream CDN can use this mechanism to request that the downstream | |||
CDN pre-positions metadata or content, or that it re-validate or | CDN pre-positions metadata or content, or that it re-validate or | |||
purge metadata or content. The upstream CDN can monitor the status | purge metadata or content. The upstream CDN can monitor the status | |||
of activity that it has triggered in the downstream CDN. | of activity that it has triggered in the downstream CDN. | |||
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 | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
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 June 5, 2014. | This Internet-Draft will expire on January 3, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Model for CDNI Triggers . . . . . . . . . . . . . . . . . . . 5 | 2. Model for CDNI Triggers . . . . . . . . . . . . . . . . . . . 5 | |||
2.1. Timing of Triggered Activity . . . . . . . . . . . . . . . 7 | 2.1. Timing of Triggered Activity . . . . . . . . . . . . . . 7 | |||
2.2. Trigger Results . . . . . . . . . . . . . . . . . . . . . 7 | 2.2. Trigger Results . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. Collections of Trigger Status Resources . . . . . . . . . . . 7 | 3. Collections of Trigger Status Resources . . . . . . . . . . . 7 | |||
4. CDNI Trigger interface . . . . . . . . . . . . . . . . . . . . 8 | 4. CDNI Trigger interface . . . . . . . . . . . . . . . . . . . 8 | |||
4.1. Creating Triggers . . . . . . . . . . . . . . . . . . . . 9 | 4.1. Creating Triggers . . . . . . . . . . . . . . . . . . . . 9 | |||
4.2. Checking Status . . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Checking Status . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.2.1. Polling Trigger Status Resource collections . . . . . 11 | 4.2.1. Polling Trigger Status Resource collections . . . . . 11 | |||
4.2.2. Polling Trigger Status Resources . . . . . . . . . . . 11 | 4.2.2. Polling Trigger Status Resources . . . . . . . . . . 11 | |||
4.3. Deleting Triggers . . . . . . . . . . . . . . . . . . . . 11 | 4.3. Deleting Triggers . . . . . . . . . . . . . . . . . . . . 11 | |||
4.4. Expiry of Trigger Status Resources . . . . . . . . . . . . 12 | 4.4. Expiry of Trigger Status Resources . . . . . . . . . . . 12 | |||
4.5. Error Handling . . . . . . . . . . . . . . . . . . . . . . 12 | 4.5. Error Handling . . . . . . . . . . . . . . . . . . . . . 12 | |||
5. Properties of Triggers . . . . . . . . . . . . . . . . . . . . 13 | 5. Properties of Triggers . . . . . . . . . . . . . . . . . . . 13 | |||
5.1. Properties of Trigger Requests . . . . . . . . . . . . . . 13 | 5.1. Properties of Trigger Requests . . . . . . . . . . . . . 13 | |||
5.1.1. Content URLs . . . . . . . . . . . . . . . . . . . . . 14 | 5.1.1. Content URLs . . . . . . . . . . . . . . . . . . . . 14 | |||
5.2. Properties of Trigger Status Resources . . . . . . . . . . 14 | 5.2. Properties of Trigger Status Resources . . . . . . . . . 15 | |||
5.3. Properties of ErrorDesc . . . . . . . . . . . . . . . . . 15 | 5.3. Properties of ErrorDesc . . . . . . . . . . . . . . . . . 16 | |||
5.4. Properties of Trigger Collections . . . . . . . . . . . . 15 | 5.4. Properties of Trigger Collections . . . . . . . . . . . . 17 | |||
5.5. Trigger Resource Simple Data Type Descriptions . . . . . . 16 | 5.5. Trigger Resource Simple Data Type Descriptions . . . . . 17 | |||
5.5.1. TriggerType . . . . . . . . . . . . . . . . . . . . . 16 | 5.5.1. TriggerType . . . . . . . . . . . . . . . . . . . . . 17 | |||
5.5.2. TriggerStatus . . . . . . . . . . . . . . . . . . . . 16 | 5.5.2. TriggerStatus . . . . . . . . . . . . . . . . . . . . 18 | |||
5.5.3. URLs . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.5.3. URLs . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
5.5.4. AbsoluteTime . . . . . . . . . . . . . . . . . . . . . 17 | 5.5.4. AbsoluteTime . . . . . . . . . . . . . . . . . . . . 18 | |||
5.5.5. ErrorCode . . . . . . . . . . . . . . . . . . . . . . 17 | 5.5.5. ErrorCode . . . . . . . . . . . . . . . . . . . . . . 18 | |||
6. JSON Encoding of Objects . . . . . . . . . . . . . . . . . . . 17 | 6. JSON Encoding of Objects . . . . . . . . . . . . . . . . . . 19 | |||
6.1. JSON Encoding of Embedded Types . . . . . . . . . . . . . 18 | 6.1. JSON Encoding of Embedded Types . . . . . . . . . . . . . 20 | |||
6.1.1. TriggerType . . . . . . . . . . . . . . . . . . . . . 18 | 6.1.1. TriggerType . . . . . . . . . . . . . . . . . . . . . 20 | |||
6.1.2. TriggerStatus . . . . . . . . . . . . . . . . . . . . 18 | 6.1.2. TriggerStatus . . . . . . . . . . . . . . . . . . . . 20 | |||
6.1.3. PatternMatch . . . . . . . . . . . . . . . . . . . . . 18 | 6.1.3. PatternMatch . . . . . . . . . . . . . . . . . . . . 20 | |||
6.1.4. ErrorDesc . . . . . . . . . . . . . . . . . . . . . . 19 | 6.1.4. ErrorDesc . . . . . . . . . . . . . . . . . . . . . . 21 | |||
6.1.5. ErrorCode . . . . . . . . . . . . . . . . . . . . . . 19 | 6.1.5. ErrorCode . . . . . . . . . . . . . . . . . . . . . . 22 | |||
6.1.6. Relationship . . . . . . . . . . . . . . . . . . . . . 19 | 6.2. MIME Media Types . . . . . . . . . . . . . . . . . . . . 22 | |||
6.1.7. Link Object . . . . . . . . . . . . . . . . . . . . . 20 | 7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
6.2. MIME Media Types . . . . . . . . . . . . . . . . . . . . . 20 | 7.1. Creating Triggers . . . . . . . . . . . . . . . . . . . . 23 | |||
7.1.1. Preposition . . . . . . . . . . . . . . . . . . . . . 23 | ||||
7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 7.1.2. Invalidate . . . . . . . . . . . . . . . . . . . . . 24 | |||
7.1. Creating Triggers . . . . . . . . . . . . . . . . . . . . 21 | 7.2. Examining Trigger Status . . . . . . . . . . . . . . . . 25 | |||
7.1.1. Preposition . . . . . . . . . . . . . . . . . . . . . 21 | 7.2.1. Collection of All Triggers . . . . . . . . . . . . . 25 | |||
7.1.2. Invalidate . . . . . . . . . . . . . . . . . . . . . . 22 | 7.2.2. Filtered Collections of Triggers . . . . . . . . . . 26 | |||
7.2. Examining Trigger Status . . . . . . . . . . . . . . . . . 23 | 7.2.3. Trigger Status Resources . . . . . . . . . . . . . . 28 | |||
7.2.1. Collection of All Triggers . . . . . . . . . . . . . . 24 | 7.2.4. Polling for Change . . . . . . . . . . . . . . . . . 30 | |||
7.2.2. Filtered Collections of Triggers . . . . . . . . . . . 25 | 7.2.5. Cancelling or Removing a Trigger . . . . . . . . . . 33 | |||
7.2.3. Trigger Status Resources . . . . . . . . . . . . . . . 26 | 7.2.6. Error Reporting . . . . . . . . . . . . . . . . . . . 35 | |||
7.2.4. Polling for Change . . . . . . . . . . . . . . . . . . 28 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | |||
7.2.5. Cancelling or Removing a Trigger . . . . . . . . . . . 31 | 8.1. CI/T MIME Media Types . . . . . . . . . . . . . . . . . . 36 | |||
7.2.6. Error Reporting . . . . . . . . . . . . . . . . . . . 33 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 36 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 34 | 9.1. Authentication, Confidentiality, Integrity Protection . . 36 | |||
8.1. CI/T MIME Media Types . . . . . . . . . . . . . . . . . . 35 | 9.2. Denial of Service . . . . . . . . . . . . . . . . . . . . 37 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 35 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 37 | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 35 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 35 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 37 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . . 35 | 11.2. Informative References . . . . . . . . . . . . . . . . . 37 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . . 36 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
1. Introduction | 1. Introduction | |||
[RFC6707] introduces the Problem scope for CDN Interconnection (CDNI) | [RFC6707] introduces the Problem scope for CDN Interconnection (CDNI) | |||
and lists the four categories of interfaces that may be used to | and lists the four categories of interfaces that may be used to | |||
compose a CDNI solution (Control, Metadata, Request Routing, | compose a CDNI solution (Control, Metadata, Request Routing, | |||
Logging). | Logging). | |||
[I-D.ietf-cdni-framework] expands on the information provided in | [I-D.ietf-cdni-framework] expands on the information provided in | |||
[RFC6707] and describes each of the interfaces and the relationships | [RFC6707] and describes each of the interfaces and the relationships | |||
skipping to change at page 4, line 30 | skipping to change at page 4, line 4 | |||
are the "High" and "Medium" priority requirements for the CI | are the "High" and "Medium" priority requirements for the CI | |||
identified in section 4 of [I-D.ietf-cdni-requirements], reproduced | identified in section 4 of [I-D.ietf-cdni-requirements], reproduced | |||
here for convenience: | here for convenience: | |||
CI-1 [HIGH] The CDNI Control interface shall allow the Upstream | CI-1 [HIGH] The CDNI Control interface shall allow the Upstream | |||
CDN to request that the Downstream CDN, including downstream | CDN to request that the Downstream CDN, including downstream | |||
cascaded CDNs, delete an object or set of objects and/or its CDNI | cascaded CDNs, delete an object or set of objects and/or its CDNI | |||
metadata from the CDN surrogates and any storage. Only the | metadata from the CDN surrogates and any storage. Only the | |||
object(s) and CDNI metadata that pertain to the requesting | object(s) and CDNI metadata that pertain to the requesting | |||
Upstream CDN are allowed to be purged. | Upstream CDN are allowed to be purged. | |||
CI-2 [MED] The CDNI Control interface should allow for multiple | CI-2 [MED] The CDNI Control interface should allow for multiple | |||
content items identified by a Content Collection ID to be purged | content items identified by a Content Collection ID to be purged | |||
using a single Content Purge action. | using a single Content Purge action. | |||
CI-3 [MED] The CDNI Control interface should allow the Upstream | CI-3 [MED] The CDNI Control interface should allow the Upstream | |||
CDN to request that the Downstream CDN, including downstream | CDN to request that the Downstream CDN, including downstream | |||
cascaded CDNs, mark an object or set of objects and/or its CDNI | cascaded CDNs, mark an object or set of objects and/or its CDNI | |||
metadata as "stale" and revalidate them before they are delivered | metadata as "stale" and revalidate them before they are delivered | |||
again. | again. | |||
CI-4 [HIGH] The CDNI Control interface shall allow the Downstream | CI-4 [HIGH] The CDNI Control interface shall allow the Downstream | |||
CDN to report on the completion of these actions (by itself, and | CDN to report on the completion of these actions (by itself, and | |||
including downstream cascaded CDNs, in a manner appropriate for | including downstream cascaded CDNs, in a manner appropriate for | |||
the action (e.g. synchronously or asynchronously). The | the action (e.g. synchronously or asynchronously). The | |||
confirmation receipt should include a success or failure | confirmation receipt should include a success or failure | |||
indication. The failure indication along with the reason are used | indication. The failure indication along with the reason are used | |||
if the Downstream CDN cannot delete the content in its storage. | if the Downstream CDN cannot delete the content in its storage. | |||
CI-5 [MED] The CDNI Control interface should support initiation | CI-5 [MED] The CDNI Control interface should support initiation | |||
and control by the Upstream CDN of pre-positioned CDNI metadata | and control by the Upstream CDN of pre-positioned CDNI metadata | |||
acquisition by the Downstream CDN. | acquisition by the Downstream CDN. | |||
CI-6 [MED] The CDNI Control interface should support initiation | CI-6 [MED] The CDNI Control interface should support initiation | |||
and control by the Upstream CDN of pre-positioned content | and control by the Upstream CDN of pre-positioned content | |||
acquisition by the Downstream CDN. | acquisition by the Downstream CDN. | |||
o Section 2 outlines the model for the CI/T Interface at a high | o Section 2 outlines the model for the CI/T Interface at a high | |||
level. | level. | |||
o Section 3 describes collections of Trigger Resources. | o Section 3 describes collections of Trigger Resources. | |||
o Section 4 defines the RESTful web service provided by dCDN. | ||||
o Section 4 defines the web service provided by the dCDN. | ||||
o Section 5 lists properties of Trigger Requests and Status | o Section 5 lists properties of Trigger Requests and Status | |||
Resources. | Resources. | |||
o Section 6 defines a JSON encoding for Trigger Requests and Status | o Section 6 defines a JSON encoding for Trigger Requests and Status | |||
Resources. | Resources. | |||
o Section 7 contains example messages. | o Section 7 contains example messages. | |||
1.1. Terminology | 1.1. Terminology | |||
This document reuses the terminology defined in [RFC6707]. | This document reuses the terminology defined in [RFC6707]. | |||
2. Model for CDNI Triggers | 2. Model for CDNI Triggers | |||
A trigger, sent from uCDN to dCDN, is a request for dCDN to do some | A trigger, sent from the uCDN to the dCDN, is a request for dCDN to | |||
work relating to data originating from uCDN. | do some work relating to data originating from the uCDN. | |||
The trigger may request action on either metadata or content, the | The trigger may request action on either metadata or content, the | |||
following actions can be requested: | following actions can be requested: | |||
o preposition - used to instruct dCDN to fetch metadata from uCDN, | o preposition - used to instruct the dCDN to fetch metadata from the | |||
or content from any origin including uCDN. | uCDN, or content from any origin including the uCDN. | |||
o invalidate - used to instruct dCDN to revalidate specific metadata | ||||
or content before re-using it. | o invalidate - used to instruct the dCDN to revalidate specific | |||
o purge - used to instruct dCDN to delete specific metadata or | metadata or content before re-using it. | |||
o purge - used to instruct the dCDN to delete specific metadata or | ||||
content. | content. | |||
The CI/T interface is a RESTful web service offered by dCDN. It | The CI/T interface is a web service offered by the dCDN. It allows | |||
allows creation and deletion of triggers, and tracking of the | creation and deletion of triggers, and tracking of the triggered | |||
triggered activity. When dCDN accepts a trigger it creates a | activity. When the dCDN accepts a trigger it creates a resource | |||
resource describing status of the triggered activity, a Trigger | describing status of the triggered activity, a Trigger Status | |||
Status Resource. The uCDN may poll Trigger Status Resources to | Resource. The uCDN MAY poll Trigger Status Resources to monitor | |||
monitor progress. | progress. | |||
Requests to invalidate and purge metadata or content apply to all | Requests to invalidate and purge metadata or content apply to all | |||
variants of that data with a given URI. | variants of that data with a given URI. | |||
The dCDN maintains a collection of Trigger Status Resources for each | The dCDN maintains a collection of Trigger Status Resources for each | |||
uCDN, each uCDN only has access to its own collection and the | uCDN, each uCDN only has access to its own collection and the | |||
location of that collection is shared when CDN interconnection is | location of that collection is shared when CDN interconnection is | |||
established. | established. | |||
To trigger activity in dCDN, uCDN will POST to the collection of | To trigger activity in the dCDN, the uCDN will POST to the collection | |||
Trigger Status Resources. If dCDN accepts the trigger, it creates a | of Trigger Status Resources. If the dCDN accepts the trigger, it | |||
new Trigger Status Resource and returns its location to uCDN. To | creates a new Trigger Status Resource and returns its location to the | |||
monitor progress, uCDN may GET the Trigger Status Resource. To | uCDN. To monitor progress, the uCDN MAY GET the Trigger Status | |||
cancel a trigger, or remove a trigger from the collection once its | Resource. To cancel a trigger, or remove a trigger from the | |||
activity has been completed, uCDN may DELETE the Trigger Status | collection once its activity has been completed, the uCDN MAY DELETE | |||
Resource. | the Trigger Status Resource. | |||
In addition to the collection of all Trigger Status Resources for | In addition to the collection of all Trigger Status Resources for | |||
uCDN, uCDN shall have access to filtered views of that collection. | uCDN, uCDN has access to filtered views of that collection. These | |||
These filtered views are defined in Section 3 and include collections | filtered views are defined in Section 3 and include collections of | |||
of active and completed triggers. These collections provide a | active and completed triggers. These collections provide a mechanism | |||
mechanism for polling the status of multiple jobs. | for polling the status of multiple jobs. | |||
Figure 1 is an example showing the basic message flow used by the | Figure 1 is an example showing the basic message flow used by the | |||
uCDN to trigger activity in dCDN, and for uCDN to discover the status | uCDN to trigger activity in dCDN, and for uCDN to discover the status | |||
of that activity. Only successful triggering is shown. Examples of | of that activity. Only successful triggering is shown. Examples of | |||
the messages are given in Section 7. | the messages are given in Section 7. | |||
uCDN dCDN | uCDN dCDN | |||
| (1) POST http://dcdn.example.com/triggers/uCDN | | | (1) POST http://dcdn.example.com/triggers/uCDN | | |||
[ ] --------------------------------------------------> [ ]--+ | [ ] --------------------------------------------------> [ ]--+ | |||
| [ ] | (2) | | [ ] | (2) | |||
| (3) HTTP 201 Response [ ]<-+ | | (3) HTTP 201 Response [ ]<-+ | |||
[ ] <-------------------------------------------------- [ ] | [ ] <-------------------------------------------------- [ ] | |||
| Loc: http://dcdn.example.com/triggers/uCDN/123 | | | Loc: http://dcdn.example.com/triggers/uCDN/123 | | |||
| | | | | | |||
. . . | . . . | |||
. . . | . . . | |||
skipping to change at page 6, line 43 | skipping to change at page 6, line 31 | |||
| [ ] | | [ ] | |||
| (5) HTTP 200 Trigger Status Resource [ ] | | (5) HTTP 200 Trigger Status Resource [ ] | |||
[ ] <-------------------------------------------------- [ ] | [ ] <-------------------------------------------------- [ ] | |||
| | | | | | |||
| | | | | | |||
Figure 1: Basic CDNI Message Flow for Triggers | Figure 1: Basic CDNI Message Flow for Triggers | |||
The steps in Figure 1 are: | The steps in Figure 1 are: | |||
1. uCDN triggers action in dCDN by posting to a collection of | 1. uCDN triggers action in the dCDN by posting to a collection of | |||
Trigger Status Resources, | Trigger Status Resources, "http://dcdn.example.com/triggers/ | |||
"http://dcdn.example.com/triggers/uCDN". The URL of this was | uCDN". The URL of this was given to the uCDN when the trigger | |||
given to uCDN when the trigger interface was established. | interface was established. | |||
2. dCDN authenticates the request, validates the trigger and if it | 2. dCDN authenticates the request, validates the trigger and if it | |||
accepts the request, creates a new Trigger Status Resource. | accepts the request, creates a new Trigger Status Resource. | |||
3. dCDN responds to uCDN with an HTTP 201 response status, and the | ||||
location of the Trigger Status Resource. | ||||
4. uCDN may repeatedly poll the Trigger Status Resource in dCDN. | 3. dCDN responds to the uCDN with an HTTP 201 response status, and | |||
the location of the Trigger Status Resource. | ||||
4. uCDN may repeatedly poll the Trigger Status Resource in the dCDN. | ||||
5. dCDN responds with the Trigger Status Resource, describing | 5. dCDN responds with the Trigger Status Resource, describing | |||
progress or results of the triggered activity. | progress or results of the triggered activity. | |||
The remainder of this document describes the messages, Trigger Status | The remainder of this document describes the messages, Trigger Status | |||
Resources, and collections of Trigger Status Resources in more | Resources, and collections of Trigger Status Resources in more | |||
detail. | detail. | |||
2.1. Timing of Triggered Activity | 2.1. Timing of Triggered Activity | |||
Timing of triggered activity is under dCDN control, including its | Timing of triggered activity is under the dCDN's control, including | |||
start-time and pacing of the activity in the network. | its start-time and pacing of the activity in the network. | |||
Invalidate and purge triggers MUST be applied to all data acquired | Invalidate and purge triggers MUST be applied to all data acquired | |||
before the trigger was created in dCDN. The dCDN MAY apply the | before the trigger was created in the dCDN. The dCDN may apply the | |||
triggers to data acquired after trigger creation. | triggers to data acquired after trigger creation. | |||
If uCDN wishes to invalidate or purge content, then immediately | If the uCDN wishes to invalidate or purge content, then immediately | |||
preposition replacement content at the same URLs, it must ensure the | pre-position replacement content at the same URLs, it SHOULD ensure | |||
dCDN has completed the invalidate/purge before initiating the | the dCDN has completed the invalidate/purge before initiating the | |||
prepositioning. If it fails to do that and the requests overlap, and | prepositioning. Otherwise, the dCDN may pre-position the new content | |||
dCDN passes the triggers on to a further dCDN in a cascade, that CDN | then immediately invalidate or purge it (as a result of the two uCDN | |||
may preposition content that has not yet been invalidated/purged in | requests running in parallel). | |||
its uCDN. | ||||
2.2. Trigger Results | 2.2. Trigger Results | |||
Each Trigger Request may operate on multiple data items. The trigger | Each Trigger Request may operate on multiple data items. The trigger | |||
shall be reported as "complete" only if all actions can be completed | MUST NOT be reported as "complete" unless all actions can be | |||
successfully, otherwise it shall be reported as "failed". The | completed successfully, otherwise it MUST be reported as "failed" or | |||
reasons for failure and URLs or Patterns affected shall be enumerated | "processed". The reasons for failure and URLs or Patterns affected | |||
in the Trigger Status Resource. For more detail, see section | SHOULD be enumerated in the Trigger Status Resource. For more | |||
Section 4.5. | detail, see section Section 4.5. | |||
If a dCDN is also acting as uCDN in a cascade, it MUST forward | If a dCDN is also acting as a uCDN in a cascade, it MUST forward | |||
triggers to any downstream CDNs that may have data affected by the | triggers to any downstream CDNs that may have data affected by the | |||
trigger. The trigger MUST NOT be reported as complete in a CDN until | trigger. The trigger MUST NOT be reported as complete in a CDN until | |||
it is complete in all of its downstream CDNs. A trigger MAY be | it is complete in all of its downstream CDNs. A trigger MAY be | |||
reported as failed as soon as it fails in a CDN or in any of its | reported as failed as soon as it fails in a CDN or in any of its | |||
downstream CDNs. | downstream CDNs. | |||
3. Collections of Trigger Status Resources | 3. Collections of Trigger Status Resources | |||
As described in Section 2, Trigger Status Resources exist in dCDN to | As described in Section 2, Trigger Status Resources exist in dCDN to | |||
report the status of activity triggered by each uCDN. | report the status of activity triggered by each uCDN. | |||
A collection of Trigger Status Resources is a resource that contains | A collection of Trigger Status Resources is a resource that contains | |||
a reference to each Trigger Status Resource in that collection. | a reference to each Trigger Status Resource in that collection. | |||
To trigger activity in dCDN, uCDN creates a new Trigger Status | To trigger activity in the dCDN, the uCDN creates a new Trigger | |||
Resource by posting to dCDN's collection of uCDN's Trigger Status | Status Resource by posting to the dCDN's collection of uCDN's Trigger | |||
Resources. The URL of each Trigger Status Resource is generated by | Status Resources. The URL of each Trigger Status Resource is | |||
the dCDN when it accepts the trigger, and returned to uCDN. This | generated by the dCDN when it accepts the trigger, and returned to | |||
immediately enables uCDN to check the status of that trigger. | the uCDN. This immediately enables the uCDN to check the status of | |||
that trigger. | ||||
The dCDN must present a different set of Trigger Status Resources to | The dCDN MUST present a different set of Trigger Status Resources to | |||
each interconnected uCDN, only Trigger Status Resources belonging to | each interconnected uCDN. Trigger Status Resources belonging to a | |||
a uCDN shall be visible to it. The dCDN may, for example, achieve | uCDN MUST NOT be visible to any other client. The dCDN may, for | |||
this by offering different collection URLs to uCDNs, or by filtering | example, achieve this by offering different collection URLs to uCDNs, | |||
the response based on the client uCDN. | or by filtering the response based on the client uCDN. | |||
The dCDN resource representing the collection of all uCDN's Trigger | The dCDN resource representing the collection of all the uCDN's | |||
Status Resources is accessible to uCDN. This collection lists all | Trigger Status Resources is accessible to the uCDN. This collection | |||
uCDN triggers that have been accepted by dCDN, and have not yet been | lists all of the uCDN triggers that have been accepted by the dCDN, | |||
deleted by uCDN or expired and removed by dCDN. | and have not yet been deleted by the uCDN, or expired and removed by | |||
the dCDN (as described in section Section 4.3). | ||||
In order to allow the uCDN to check status of multiple jobs in a | ||||
single request, the dCDN SHOULD also maintain collections | ||||
representing filtered views of the collection of all Trigger Status | ||||
Resources. The filtered collections are: | ||||
In order to allow uCDN to check status of multiple jobs in a single | ||||
request, dCDN shall also maintain collections representing filtered | ||||
views of the collection of all Trigger Status Resources. The | ||||
filtered collections are: | ||||
o Pending - Trigger Status Resources for triggers that have been | o Pending - Trigger Status Resources for triggers that have been | |||
accepted, but not yet acted upon. | accepted, but not yet acted upon. | |||
o Active - Trigger Status Resources for triggered activity that is | o Active - Trigger Status Resources for triggered activity that is | |||
currently being processed in dCDN. | currently being processed in the dCDN. | |||
o Complete - Trigger Status Resources representing activity that | o Complete - Trigger Status Resources representing activity that | |||
completed successfully. | completed successfully, or for which no further status updates | |||
will be made by the dCDN. | ||||
o Failed - Trigger Status Resources representing activity that | o Failed - Trigger Status Resources representing activity that | |||
failed. | failed. | |||
4. CDNI Trigger interface | 4. CDNI Trigger interface | |||
This section describes an interface to enable an upstream CDN to | This section describes an interface to enable an upstream CDN to | |||
trigger defined activities in a downstream CDN. The interface is | trigger defined activities in a downstream CDN. The interface is | |||
intended to be independent of the set of activities defined now, or | intended to be independent of the set of activities defined now, or | |||
that may be defined in future. | that may be defined in future. | |||
CI/T is built on the principles of RESTful web services. Requests | CI/T is built on the principles of RESTful web services. Requests | |||
are made over HTTP, and the HTTP Method defines the operation the | are made over HTTP, and the HTTP Method defines the operation the | |||
request would like to perform. The corresponding HTTP Response | request would like to perform. The corresponding HTTP Response | |||
returns the status of the operation in the HTTP Status Code and | returns the status of the operation in the HTTP Status Code and | |||
returns the current representation of the resource (if appropriate) | returns the current representation of the resource (if appropriate) | |||
in the Response Body. HTTP Responses from servers implementing CI/T | in the Response Body. HTTP Responses from servers implementing CI/T | |||
that contain a response body SHOULD include an ETag to enable | that contain a response body SHOULD include an ETag to enable | |||
validation of cached versions of returned resources. | validation of cached versions of returned resources. | |||
Servers implementing CI/T MUST support the HTTP GET, HEAD, POST and | Servers implementing CI/T MUST support the HTTP GET, HEAD, POST and | |||
DELETE methods. The only representation specified in this document | DELETE methods as defined in [RFC7231]. The only representation | |||
is JSON. | specified in this document is JSON, [RFC7159]. | |||
Trigger Requests are POSTed to a URI in dCDN. If the trigger is | The URL of the dCDN's collections of Trigger Status Resources need to | |||
accepted by dCDN, it creates a Trigger Status Resource and returns | be either discovered by, or configured in, the uCDN. The mechanism | |||
its URI to dCDN in an HTTP 201 response. The triggered activity can | for discovery of those URLs is outside the scope of this document. | |||
then be monitored by uCDN using that resource and the collections | ||||
described in Section 3. | ||||
The URI that Trigger Requests should be POSTed to needs to be either | Trigger Requests are POSTed to the dCDN's collection of all Trigger | |||
discovered by or configured in the upstream CDN. Performing a GET on | Status Resources. If the trigger is accepted by the dCDN, it creates | |||
that URI retrieves a collection of the URIs of all Trigger Status | a new Trigger Status Resource and returns its URI to the dCDN in an | |||
Resources. The URI of each Trigger Status Resource is also returned | HTTP 201 response. The triggered activity can then be monitored by | |||
to uCDN when it is created. This means all Trigger Status Resources | the uCDN using that resource and the collections described in | |||
can be discovered, so CI/T servers are free to assign whatever | Section 3. | |||
structure they desire to the URIs for CI/T resources. CI/T clients | ||||
MUST NOT make any assumptions regarding the structure of CI/T URIs or | The URI of each Trigger Status Resource is returned to the uCDN when | |||
the mapping between CI/T objects and their associated URIs. | it is created. This means all Trigger Status Resources can be | |||
Therefore any URIs present in the examples below are purely | discovered, so CI/T servers are free to assign whatever structure | |||
illustrative and are not intended to impose a definitive structure on | they desire to the URIs for CI/T resources. CI/T clients MUST NOT | |||
CI/T interface implementations. | make any assumptions regarding the structure of CI/T URIs or the | |||
mapping between CI/T objects and their associated URIs. Therefore | ||||
any URIs present in the examples below are purely illustrative and | ||||
are not intended to impose a definitive structure on CI/T interface | ||||
implementations. | ||||
The CI/T interface builds on top of HTTP, so CI/T servers may make | The CI/T interface builds on top of HTTP, so CI/T servers may make | |||
use of any HTTP feature when implementing the CI/T interface. For | use of any HTTP feature when implementing the CI/T interface. For | |||
example, a CI/T server may make use of HTTP's caching mechanisms to | example, a CI/T server may make use of HTTP's caching mechanisms to | |||
indicate that the returned response/representation has not been | indicate that a requested response/representation has not been | |||
modified since it was last returned, reducing the processing needed | modified, reducing the processing needed to determine whether the | |||
to determine whether the status of triggered activity has changed. | status of triggered activity has changed. | |||
This specification is neutral with regard to the transport below the | This specification is neutral with regard to the transport below the | |||
HTTP layer. | HTTP layer. | |||
Discovery of the CI/T Interface is outside the scope of this | The dCDN MUST ensure that activity triggered by the uCDN only affects | |||
document. It is anticipated that a common mechanism for discovery of | ||||
all CDNI interfaces will be defined. | ||||
The dCDN must ensure that activity triggered by uCDN only affects | ||||
metadata or content originating from that uCDN. Since only one CDN | metadata or content originating from that uCDN. Since only one CDN | |||
can be authoritative for a given item of metadata or content, this | can be authoritative for a given item of metadata or content, this | |||
requirement means there cannot be any "loops" in trigger requests | requirement means there cannot be any "loops" in trigger requests | |||
between CDNs. | between CDNs. | |||
4.1. Creating Triggers | 4.1. Creating Triggers | |||
To create a new trigger, uCDN makes an HTTP POST to the unfiltered | To create a new trigger, the uCDN makes an HTTP POST to the | |||
collection of its triggers. The request body of that POST is a | unfiltered collection of its triggers. The request body of that POST | |||
Trigger Request. | is a Trigger Request. | |||
dCDN validates and authenticates that request, if it is malformed or | The dCDN validates and authenticates that request, if it is malformed | |||
uCDN does not have sufficient access rights it MAY reject the request | or the uCDN does not have sufficient access rights it MAY reject the | |||
immediately. In this case, it SHALL respond with an appropriate 4xx | request immediately. In this case, it MUST respond with an | |||
HTTP error code and no resource shall be created on dCDN. | appropriate 4xx HTTP error code and a resource MUST NOT be created on | |||
dCDN. | ||||
If the request is accepted, uCDN SHALL create a new Trigger Status | If the request is accepted, the uCDN MUST create a new Trigger Status | |||
Resource. The HTTP response to dCDN SHALL have status code 201 and | Resource. The HTTP response to the dCDN MUST have status code 201 | |||
the URI of the Trigger Status Resource in the Location header field. | and the URI of the Trigger Status Resource in the Location header | |||
The HTTP response MAY include the content of the newly created | field. The HTTP response SHOULD include the content of the newly | |||
Trigger Status Resource, this is recommended particularly in cases | created Trigger Status Resource, this is recommended particularly in | |||
where the trigger has completed immediately. | cases where the trigger has completed immediately. | |||
Once a Trigger Status Resource has been created dCDN MUST NOT re-use | Once a Trigger Status Resource has been created the dCDN MUST NOT re- | |||
its location, even after that resource has been removed through | use its location, even after that resource has been removed. | |||
deletion or expiry. | ||||
The "request" property of the Trigger Status Resource SHALL contain | The "request" property of the Trigger Status Resource contains the | |||
the information posted in the body of the Trigger Request. Note that | information posted in the body of the Trigger Request. Note that | |||
this need not be a byte-for-byte copy. For example, in the JSON | this need not be a byte-for-byte copy. For example, in the JSON | |||
representation the dCDN may re-serialise the information differently. | representation the dCDN may re-serialise the information differently. | |||
If the trigger is queued by dCDN for later action, the "status" | If the dCDN is not able to track triggered activity, it MUST indicate | |||
property of the Trigger Status Resource SHALL be "pending". Once | that indicate that it has accepted the request but will not be | |||
trigger processing has started the "status" SHALL be "active". | providing further status updates. To do this, it sets the "status" | |||
of the Trigger Status Resource to "processed". In this case, CI/T | ||||
processing should continue as for a "complete" request, so the | ||||
Trigger Status Resource MUST be added to the dCDN's collection of | ||||
Complete Triggers. The dCDN SHOULD also provide an estimated | ||||
completion time for the request, by using the "etime" property of the | ||||
Trigger Status Resource. This will allow the uCDN to schedule | ||||
prepositioning after an earlier delete of the same URLs is expected | ||||
to have finished. | ||||
A trigger may result in no activity in dCDN if, for example, it is an | If the dCDN is able to track triggered activity, the trigger is | |||
invalidate or purge request for data the dCDN has not acquired, or a | queued by the dCDN for later action, the "status" property of the | |||
prepopulate request for data it has already acquired. In this case, | Trigger Status Resource MUST be "pending". Once trigger processing | |||
the "status" of the Trigger Status Resource shall be "complete" and | has started the "status" MUST be "active". Finally, once the | |||
the Trigger Status Resource shall be added to the dCDN collection of | triggered activity is complete, the trigger status MUST be set to | |||
Complete Triggers. | "complete" or "failed". | |||
If dCDN is not able to track triggered activity, it MAY indicate that | A trigger may result in no activity in the dCDN if, for example, it | |||
it has undertaken to complete the activity but will not report | is an invalidate or purge request for data the dCDN has not yet | |||
completion or any further errors. To do this, it must set the | acquired, or a prepopulate request for data it has already acquired | |||
trigger status to "complete", with an estimated completion time in | and which is still valid. In this case, the "status" of the Trigger | |||
the future ("etime" greater than "mtime"). | Status Resource MUST be "processed" or "complete", and the Trigger | |||
Status Resource MUST be added to the dCDN's collection of Complete | ||||
Triggers. | ||||
Once created, Trigger Status Resources may be deleted by uCDN but not | Once created, Trigger Status Resources may be deleted by the uCDN but | |||
modified. The dCDN MUST reject PUT and POST requests from uCDN to | not modified. The dCDN MUST reject PUT and POST requests from the | |||
Trigger Status Resources using HTTP status code 403. | uCDN to Trigger Status Resources using HTTP status code 403. | |||
4.2. Checking Status | 4.2. Checking Status | |||
The uCDN has two ways to check progress of activity it has triggered | The uCDN has two ways to check progress of activity it has triggered | |||
in dCDN, described in the following sections. | in the dCDN, described in the following sections. | |||
Because the triggers protocol is based on HTTP, Entity Tags may be | To check for change in status of a resource or collection of | |||
used by the uCDN as cache validators, as defined in section 3.11 of | resources without re-fetching the whole resource or collection, | |||
[RFC2616], to check for change in status of a resource or collection | Entity Tags SHOULD be used by the uCDN as cache validators, as | |||
of resources without re-fetching the whole resource or collection. | defined in [RFC7232]. | |||
The dCDN should use the cache control headers for responses to GETs | The dCDN SHOULD use the cache control headers for responses to GETs | |||
for Trigger Status Resources and Collections to indicate the | for Trigger Status Resources and Collections to indicate the | |||
frequency at which it recommends uCDN should poll for change. | frequency at which it recommends uCDN should poll for change. | |||
4.2.1. Polling Trigger Status Resource collections | 4.2.1. Polling Trigger Status Resource collections | |||
uCDN can fetch the collection of its Trigger Status Resources, or | The uCDN can fetch the collection of its Trigger Status Resources, or | |||
filtered views of that collection. | filtered views of that collection. | |||
This makes it possible to poll status of all triggered activity in a | This makes it possible to poll status of all triggered activity in a | |||
single request. If dCDN moves a Trigger Status Resource from the | single request. If the dCDN moves a Trigger Status Resource from the | |||
Active to the Completed collection, uCDN may chose to fetch the | Active to the Completed collection, the uCDN may chose to fetch the | |||
result of that activity. | result of that activity. | |||
When polling in this way, uCDN may choose to use HTTP Entity Tags to | When polling in this way, the uCDN SHOULD use HTTP Entity Tags to | |||
monitor for change, rather than repeatedly fetching the whole | monitor for change, rather than repeatedly fetching the whole | |||
collection. | collection. | |||
4.2.2. Polling Trigger Status Resources | 4.2.2. Polling Trigger Status Resources | |||
uCDN has a reference (URI provided by the dCDN) for each Trigger | The uCDN has a reference (URI provided by the dCDN) for each Trigger | |||
Status Resource it has created, it may fetch that resource at any | Status Resource it has created, it may fetch that resource at any | |||
time. | time. | |||
This may be used to retrieve progress information, and to fetch the | This MAY be used to retrieve progress information, and to fetch the | |||
result of triggered activity. | result of triggered activity. | |||
4.3. Deleting Triggers | 4.3. Deleting Triggers | |||
The uCDN MAY delete Trigger Status Resources at any time, using the | The uCDN MAY delete Trigger Status Resources at any time, using the | |||
HTTP DELETE method. | HTTP DELETE method. | |||
Once deleted, the references to a Trigger Status Resource MUST be | Once deleted, the references to a Trigger Status Resource MUST be | |||
removed from all Trigger Status Resource collections. Subsequent | removed from all Trigger Status Resource collections. Subsequent | |||
requests for the resource shall be handled as required by HTTP, and | requests for the resource MUST be handled as required by HTTP, and so | |||
so will receive responses with status 404 or 410. | will receive responses with status 404 or 410. | |||
If a "pending" Trigger Status Resource is deleted, dCDN SHOULD NOT | If a "pending" Trigger Status Resource is deleted, the dCDN SHOULD | |||
start processing of that activity. Deleting a "pending" trigger does | NOT start processing of that activity. Deleting a "pending" trigger | |||
not however guarantee that it is not started because, once it has | does not however guarantee that it is not started because the uCDN | |||
triggered activity, uCDN cannot control the timing of that activity. | cannot control the timing of that activity. Processing may, for | |||
Processing may, for example, start after the DELETE is sent by uCDN | example, start after the DELETE is sent by the uCDN but before the | |||
and before the DELETE is processed by dCDN. | DELETE is processed by the dCDN. | |||
If an "active" Trigger Status Resource is deleted, dCDN MAY stop | If an "active" Trigger Status Resource is deleted, the dCDN MAY stop | |||
processing the triggered activity. However, as with deletion of a | processing the triggered activity. However, as with deletion of a | |||
"pending" trigger, dCDN does not guarantee this. | "pending" trigger, the dCDN does not guarantee this. | |||
Deletion of a "complete" or "failed" Trigger Status Resource requires | Deletion of a "complete", "processed" or "failed" Trigger Status | |||
no processing in dCDN other than deletion of the resource. | Resource requires no processing in the dCDN other than deletion of | |||
the resource. | ||||
4.4. Expiry of Trigger Status Resources | 4.4. Expiry of Trigger Status Resources | |||
The dCDN MAY choose to automatically delete Trigger Status Resources | The dCDN MAY choose to automatically delete Trigger Status Resources | |||
some time after they become completed or failed. In this case, dCDN | some time after they become "complete", "processed" or "failed". In | |||
will remove the resource and respond to subsequent requests for it | this case, the dCDN will remove the resource and respond to | |||
with HTTP status 404 or 410. | subsequent requests for it with HTTP status 404 or 410. | |||
If dCDN performs this housekeeping, it MUST have reported the length | If the dCDN performs this housekeeping, it MUST have reported the | |||
of time after which completed Trigger Status Resources become stale | length of time after which completed Trigger Status Resources become | |||
via a property of the collection of all Trigger Status Resources. It | stale via a property of the collection of all Trigger Status | |||
is recommended that Trigger Status Resources are automatically | Resources. It is recommended that Trigger Status Resources are not | |||
deleted 24 hours after they become completed or failed. | automatically deleted for at least 24 hours after they become | |||
"complete", "processed" or "failed". | ||||
To ensure it has access to the status of its completed and failed | To ensure it has access to the status of its completed and failed | |||
triggers, it is recommended that uCDN's polling interval is half the | triggers, it is recommended that the uCDN's polling interval is half | |||
time after which records for completed activity will be considered | the time after which records for completed activity will be | |||
stale. | considered stale. | |||
4.5. Error Handling | 4.5. Error Handling | |||
A CI/T server may reject a trigger request using HTTP status codes, | A CI/T server may reject a trigger request using HTTP status codes. | |||
for example 400 if the request is malformed or 401 if the client does | For example, 400 if the request is malformed, or 401 if the client | |||
not have permission to create triggers or it is trying to act on | does not have permission to create triggers or it is trying to act on | |||
another CDN's data. | another CDN's data. | |||
If any part of the trigger request fails the trigger shall be | If any part of the trigger request fails, the trigger SHOULD be | |||
reported as "failed" once its activity is complete, or if no further | reported as "failed" once its activity is complete or if no further | |||
errors will be reported. The "errors" property in the Trigger Status | errors will be reported. The "errors" property in the Trigger Status | |||
Resource will be used to enumerate which actions failed and the | Resource will be used to enumerate which actions failed and the | |||
reasons for failure, and may be present while the trigger is still | reasons for failure, and may be present while the trigger is still | |||
"pending" or "active" if the trigger is still running for some URLs | "pending" or "active", if the trigger is still running for some URLs | |||
or Patterns in the trigger request. | or Patterns in the trigger request. | |||
Once a request has been accepted, processing errors are reported in | Once a request has been accepted, processing errors are reported in | |||
the Trigger Status Resource using a list of "ErrorDesc". Each | the Trigger Status Resource using a list of "ErrorDesc". Each | |||
ErrorDesc is used to report errors against one or more of the URLs or | ErrorDesc is used to report errors against one or more of the URLs or | |||
Patterns in the trigger request. | Patterns in the trigger request. | |||
If a surrogate affected by a trigger is offline in dCDN, or dCDN is | If a surrogate affected by a trigger is offline in the dCDN, or the | |||
unable to pass a trigger request on to any of its affected dCDNs; | dCDN is unable to pass a trigger request on to any of its cascaded | |||
dCDN should report an error if the request is abandoned, otherwise it | dCDNs; the dCDN SHOULD report an error if the request is abandoned. | |||
must keep the trigger in state "pending" or "active" until it's acted | Otherwise, it SHOULD keep the trigger in state "pending" or "active" | |||
upon or uCDN chooses to cancel it. Or, if the request is queued and | until it's acted upon or the uCDN chooses to cancel it. Or, if the | |||
dCDN will not report further status, dCDN may report the trigger as | request is queued and the dCDN will not report further status, the | |||
"complete" with an "etime" in the future. | dCDN MAY report the trigger as "processed", in which case it SHOULD | |||
also provide an estimated completion time. | ||||
Note that an "invalidate" trigger may be reported as "complete" when | Note that an "invalidate" trigger may be reported as "complete" when | |||
surrogates that may have the data are offline, if those surrogates | surrogates that may have the data are offline. In this case, | |||
will not use the affected data without first revalidating it when | surrogates MUST NOT use the affected data without first revalidating | |||
they are back online. This does not apply to "preposition" or | it when they are back online. This does not apply to "preposition" | |||
"purge" triggers. | or "purge" triggers. | |||
5. Properties of Triggers | 5. Properties of Triggers | |||
5.1. Properties of Trigger Requests | 5.1. Properties of Trigger Requests | |||
Properties of Trigger Requests are defined in the following | Properties of Trigger Requests are defined in the following | |||
subsections. | subsections. | |||
Property: type | Property: type | |||
Description: This property defines the type of the trigger: | ||||
Description: This property defines the type of the trigger. | ||||
Type: TriggerType | Type: TriggerType | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: metadata.urls | Property: metadata.urls | |||
Description: The uCDN URL for the metadata the trigger applies | Description: The uCDN URL for the metadata the trigger applies | |||
to. | to. | |||
Type: URLs | Type: URLs | |||
Mandatory: No, but at least one of 'metadata.*' or 'content.*' | Mandatory: No, but at least one of 'metadata.*' or 'content.*' | |||
MUST be present and non-empty. | MUST be present and non-empty. | |||
Property: content.urls | Property: content.urls | |||
Description: URLs of content data the trigger applies to, see | Description: URLs of content data the trigger applies to, see | |||
Section 5.1.1. | Section 5.1.1. | |||
Type: URLs | Type: URLs | |||
Mandatory: No, but at least one of 'metadata.*' or 'content.*' | Mandatory: No, but at least one of 'metadata.*' or 'content.*' | |||
MUST be present and non-empty. | MUST be present and non-empty. | |||
Property: content.ccid | Property: content.ccid | |||
Description: The Content Collection IDentifier of data the | Description: The Content Collection IDentifier of data the | |||
trigger applies to. | trigger applies to. | |||
Type: List of strings | Type: List of strings | |||
Mandatory: No, but at least one of 'metadata.*' or 'content.*' | Mandatory: No, but at least one of 'metadata.*' or 'content.*' | |||
MUST be present and non-empty. | MUST be present and non-empty. | |||
Property: metadata.patterns | Property: metadata.patterns | |||
Description: The metadata the trigger applies to. | Description: The metadata the trigger applies to. | |||
Type: List of PatternMatch | Type: List of PatternMatch | |||
Mandatory: No, but at least one of 'metadata.*' or 'content.*' | Mandatory: No, but at least one of 'metadata.*' or 'content.*' | |||
MUST be present and non-empty, and metadata.patterns MUST NOT | MUST be present and non-empty, and metadata.patterns MUST NOT | |||
be present if the TriggerType is Preposition. | be present if the TriggerType is Preposition. | |||
Property: content.patterns | Property: content.patterns | |||
Description: The content data the trigger applies to. | Description: The content data the trigger applies to. | |||
Type: List of PatternMatch | Type: List of PatternMatch | |||
Mandatory: No, but at least one of 'metadata.*' or 'content.*' | Mandatory: No, but at least one of 'metadata.*' or 'content.*' | |||
MUST be present and non-empty, and content.patterns MUST NOT be | MUST be present and non-empty, and content.patterns MUST NOT be | |||
present if the TriggerType is Preposition. | present if the TriggerType is Preposition. | |||
5.1.1. Content URLs | 5.1.1. Content URLs | |||
To refer to content in dCDN, uCDN must present URLs in the same form | To refer to content in the dCDN, the uCDN MUST present URLs in the | |||
clients will use to access content in that dCDN, after transformation | same form clients will use to access content in that dCDN, after | |||
to remove any surrogate-specific parts of a 302-redirect URL form. | transformation to remove any surrogate-specific parts of a | |||
By definition, it is always possible to locate content based on URLs | 302-redirect URL form. By definition, it is always possible to | |||
in this form. | locate content based on URLs in this form. | |||
If content URLs are transformed by an intermediate CDN in a cascade, | If content URLs are transformed by an intermediate CDN in a cascade, | |||
that intermediate CDN must transform URLs in trigger requests it | that intermediate CDN MUST transform URLs in trigger requests it | |||
passes to its dCDN. | passes to its dCDN. | |||
When processing trigger requests, CDNs SHOULD ignore the URL scheme | When processing trigger requests, CDNs MUST ignore the URL scheme | |||
(http or https) in comparing URLs. For example, for an invalidate or | (http or https) in comparing URLs. For example, for an invalidate or | |||
purge trigger, content may invalidated or purged regardless of the | purge trigger, content MUST invalidated or purged regardless of the | |||
protocol clients use to request it. | protocol clients use to request it. | |||
5.2. Properties of Trigger Status Resources | 5.2. Properties of Trigger Status Resources | |||
Property: trigger | Property: trigger | |||
Description: The properties of trigger request that created | Description: The properties of trigger request that created | |||
this record. | this record. | |||
Type: TriggerRequest | Type: TriggerRequest | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: ctime | Property: ctime | |||
Description: Time at which the request was received by dCDN. | ||||
Time is local to dCDN, there is no requirement to synchronise | Description: Time at which the request was received by the | |||
clocks between interconnected CDNs. | dCDN. Time is determined by the dCDN, there is no requirement | |||
to synchronise clocks between interconnected CDNs. | ||||
Type: AbsoluteTime | Type: AbsoluteTime | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: mtime | Property: mtime | |||
Description: Time at which the resource was last modified. | Description: Time at which the resource was last modified. | |||
Time is local to dCDN, there is no requirement to synchronise | Time is determined by the dCDN, there is no requirement to | |||
clocks between interconnected CDNs. | synchronise clocks between interconnected CDNs. | |||
Type: AbsoluteTime | Type: AbsoluteTime | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: etime | Property: etime | |||
Description: Estimate of the time at which dCDN expects to | ||||
complete the activity. Time is local to dCDN, there is no | Description: Estimate of the time at which the dCDN expects to | |||
requirement to synchronise clocks between interconnected CDNs. | complete the activity. Time is determined by the dCDN, there | |||
is no requirement to synchronise clocks between interconnected | ||||
CDNs. | ||||
Type: AbsoluteTime | Type: AbsoluteTime | |||
Mandatory: No | Mandatory: No | |||
Property: status | Property: status | |||
Description: Current status of the triggered activity. | Description: Current status of the triggered activity. | |||
Type: TriggerStatus | Type: TriggerStatus | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: errors | Property: errors | |||
Description: List of ErrorDesc. | Description: List of ErrorDesc. | |||
Mandatory: No. | Mandatory: No. | |||
5.3. Properties of ErrorDesc | 5.3. Properties of ErrorDesc | |||
An ErrorDesc object is used to report failure for URLs and patterns | An ErrorDesc object is used to report failure for URLs and patterns | |||
in a trigger request. | in a trigger request. | |||
Property: error | Property: error | |||
Type: ErrorCode. | Type: ErrorCode. | |||
Mandatory: Yes. | Mandatory: Yes. | |||
Property: metadata.urls, content.urls, metadata.patterns, | Property: metadata.urls, content.urls, metadata.patterns, | |||
content.patterns | content.patterns | |||
Description: Metadata and content references copied from the | Description: Metadata and content references copied from the | |||
trigger request. Only those URLs and patterns to which the | trigger request. Only those URLs and patterns to which the | |||
error applies shall be included in each property, but those | error applies shall be included in each property, but those | |||
URLs and patterns shall be exactly as they appear in the | URLs and patterns MUST be exactly as they appear in the | |||
request, dCDN must not generalise the URLs. (For example, if | request, the dCDN must not generalise the URLs. (For example, | |||
uCDN requests prepositioning of URLs | if the uCDN requests prepositioning of URLs | |||
"http://ucdn.example.com/a" and "http://ucdn.example.com/b", | "http://ucdn.example.com/a" and "http://ucdn.example.com/b", | |||
dCDN may not generalise its error report to Pattern | the dCDN must not generalise its error report to Pattern | |||
"http://ucdn.example.com/*"). | "http://ucdn.example.com/*"). | |||
Mandatory: At least one of these properties is mandatory in | Mandatory: At least one of these properties is mandatory in | |||
each ErrorDesc. | each ErrorDesc. | |||
Property: description | Property: description | |||
Description: A String containing a human-readable description | Description: A String containing a human-readable description | |||
of the error. | of the error. | |||
Mandatory: No. | Mandatory: No. | |||
5.4. Properties of Trigger Collections | 5.4. Properties of Trigger Collections | |||
Property: links | Property: triggers | |||
Description: References to Trigger Status Resources in the | ||||
Description: Links to Trigger Status Resources in the | ||||
collection. | collection. | |||
Type: List of Relationships. | Type: URLs. | |||
Mandatory: Yes | Mandatory: Yes | |||
Property: staleresourcetime | Property: staleresourcetime | |||
Description: The length of time for which dCDN guarantees to | ||||
keep a completed Trigger Status Resource. After this time, | Description: The length of time for which the dCDN guarantees | |||
dCDN MAY delete the resource and all references to it from | to keep a completed Trigger Status Resource. After this time, | |||
the dCDN MAY delete the resource and all references to it from | ||||
collections. | collections. | |||
Type: Integer, time in seconds. | Type: Integer, time in seconds. | |||
Mandatory: Yes, in the collection of all Trigger Status | Mandatory: Yes, in the collection of all Trigger Status | |||
Resources if dCDN deletes stale entries. If the property is | Resources if the dCDN deletes stale entries. If the property | |||
present in the filtered collections, it MUST have the same | is present in the filtered collections, it MUST have the same | |||
value as in the collection of all Trigger Status Resources. | value as in the collection of all Trigger Status Resources. | |||
5.5. Trigger Resource Simple Data Type Descriptions | 5.5. Trigger Resource Simple Data Type Descriptions | |||
This section describes the simpler data types that are used for | This section describes the simpler data types that are used for | |||
properties of Trigger Status resources. | properties of Trigger Status resources. | |||
5.5.1. TriggerType | 5.5.1. TriggerType | |||
This type defines the type of action being triggered, permitted | This type defines the type of action being triggered, permitted | |||
actions are: | actions are: | |||
o Preposition - a request for dCDN to acquire metadata or content. | ||||
o Invalidate - a request for dCDN to invalidate metadata or content. | o Preposition - a request for the dCDN to acquire metadata or | |||
After servicing this request the dCDN will not use the specified | content. | |||
data without first re-validating it using, for example, an "If- | ||||
None-Match" HTTP request. The dCDN need not erase the associated | o Invalidate - a request for the dCDN to invalidate metadata or | |||
data. | content. After servicing this request the dCDN will not use the | |||
o Purge - a request for dCDN to erase metadata or content. After | specified data without first re-validating it using, for example, | |||
servicing the request, the specified data must not be held on | an "If-None-Match" HTTP request. The dCDN need not erase the | |||
dCDN. | associated data. | |||
o Purge - a request for the dCDN to erase metadata or content. | ||||
After servicing the request, the specified data MUST NOT be held | ||||
on dCDN. | ||||
5.5.2. TriggerStatus | 5.5.2. TriggerStatus | |||
This type describes the current status of a Trigger, possible values | This type describes the current status of a Trigger, possible values | |||
are: | are: | |||
o Pending - the trigger has not yet been acted upon. | o Pending - the trigger has not yet been acted upon. | |||
o Active - the trigger is currently being acted upon. | o Active - the trigger is currently being acted upon. | |||
o Complete - the triggered activity completed successfully, or the | ||||
trigger has been accepted and no further status update will be | o Complete - the triggered activity completed successfully. | |||
made. | ||||
o Processed - the trigger has been accepted and no further status | ||||
update will be made (may be used in cases where completion cannot | ||||
be confirmed). | ||||
o Failed - the triggered activity could not be completed. | o Failed - the triggered activity could not be completed. | |||
5.5.3. URLs | 5.5.3. URLs | |||
This type describes a set of references to metadata or content, it is | This type describes a set of references to metadata or content, it is | |||
simply a list of absolute URLs. | simply a list of absolute URLs. | |||
5.5.4. AbsoluteTime | 5.5.4. AbsoluteTime | |||
Times are expressed in seconds since the UNIX epoch. | Times are expressed in seconds since the UNIX epoch. | |||
5.5.5. ErrorCode | 5.5.5. ErrorCode | |||
This type is used by dCDN to report failures in trigger processing. | This type is used by dCDN to report failures in trigger processing. | |||
o EMETA - dCDN was unable to acquire metadata required to fulfil the | o EMETA - the dCDN was unable to acquire metadata required to fulfil | |||
request. | the request. | |||
o ECONTENT - dCDN was unable to acquire content (preposition | ||||
o ECONTENT - the dCDN was unable to acquire content (preposition | ||||
triggers only). | triggers only). | |||
o EPERM - uCDN does not have permission to trigger the requested | ||||
o EPERM - the uCDN does not have permission to trigger the requested | ||||
activity (for example, the data is owned by another CDN). | activity (for example, the data is owned by another CDN). | |||
o EREJECT - dCDN is not willing to fulfil the request (for example, | ||||
a preposition request for content at a time when dCDN would not | ||||
accept Request Routing requests from uCDN). | ||||
o ECDN - An internal error in dCDN or one of its downstream CDNs. | ||||
6. JSON Encoding of Objects | o EREJECT - the dCDN is not willing to fulfil the request (for | |||
example, a preposition request for content at a time when dCDN | ||||
would not accept Request Routing requests from uCDN). | ||||
This encoding is based on that described in [I-D.ietf-cdni-metadata], | o ECDN - An internal error in the dCDN or one of its downstream | |||
but has been reproduced here while metadata work is in progress. | CDNs. | |||
Once that work is complete, the authors would look to align with the | ||||
structure of the metadata draft and make reference to common | 6. JSON Encoding of Objects | |||
definitions as appropriate. | ||||
The encoding for a CI/T object is a JSON object containing a | The encoding for a CI/T object is a JSON object containing a | |||
dictionary of (key,value) pairs where the keys are the property | dictionary of (key,value) pairs where the keys are the property | |||
names, and the values are the associated property values. | names, 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 the | dependent on the specific object being encoded (i.e. dependent on the | |||
skipping to change at page 17, line 47 | skipping to change at page 19, line 25 | |||
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 the | dependent on the specific object being encoded (i.e. dependent on the | |||
MIME Media Type of the returned resource). | MIME Media Type of the returned resource). | |||
The "trigger" property of the top level JSON object lists the | The "trigger" property of the top level JSON object lists the | |||
requested action. | requested action. | |||
Key: trigger | Key: trigger | |||
Description: An object specifying the trigger type and a set of | Description: An object specifying the trigger type and a set of | |||
data to act upon. | data to act upon. | |||
Type: A JSON object. | Type: A JSON object. | |||
Mandatory: Yes. | Mandatory: Yes. | |||
Object keys in JSON are case sensitive and therefore any dictionary | Object keys in JSON are case sensitive and therefore any dictionary | |||
key defined by this document (for example the names of CI/T object | key defined by this document (for example the names of CI/T object | |||
properties) MUST always be represented in lowercase. | properties) MUST always be represented in lowercase. | |||
In addition to the properties of an object, the following additional | In addition to the properties of an object, the following additional | |||
keys may be present. | keys MAY be present. | |||
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 document MUST be | |||
absolute URLs. | absolute URLs. | |||
Type: URI | Type: URI | |||
Mandatory: No | Mandatory: No | |||
Key: links | Key: _links | |||
Description: The relationships of this object to other | Description: The relationships of this object to other | |||
addressable objects. | addressable objects. | |||
Type: Array of Relationships. | Type: Array of Relationships. | |||
Mandatory: Yes | Mandatory: Yes | |||
6.1. JSON Encoding of Embedded Types | 6.1. JSON Encoding of Embedded Types | |||
6.1.1. TriggerType | 6.1.1. TriggerType | |||
Key: type | Key: type | |||
Description: One of "preposition", "invalidate" or "purge". | Description: One of "preposition", "invalidate" or "purge". | |||
Type: string | Type: string | |||
6.1.2. TriggerStatus | 6.1.2. TriggerStatus | |||
Key: status | Key: status | |||
Description: One of "pending", "active", "failed", "complete" | Description: One of "pending", "active", "failed", "complete" | |||
Type: string | Type: string | |||
6.1.3. PatternMatch | 6.1.3. PatternMatch | |||
A PatternMatch is encoded as a JSON Object containing a string to | A PatternMatch is encoded as a JSON Object containing a string to | |||
match and flags describing the type of match. | match and flags describing the type of match. | |||
Key: pattern | Key: pattern | |||
Description: A pattern for string matching. The pattern may | Description: A pattern for string matching. The pattern may | |||
contain the wildcards * and ?, where * matches any sequence of | contain the wildcards * and ?, where * matches any sequence of | |||
characters (including the empty string) and ? matches exactly | characters (including the empty string) and ? matches exactly | |||
one character. The three literals \ , * and ? should be | one character. The three literals \ , * and ? MUST be escaped | |||
escaped as \\, \* and \? | as \\, \* and \? | |||
Type: String | Type: String | |||
Mandatory: Yes | Mandatory: Yes | |||
Key: case-sensitive | Key: case-sensitive | |||
Description: Flag indicating whether or not case-sensitive | Description: Flag indicating whether or not case-sensitive | |||
matching should be used. | matching should be used. | |||
Type: Boolean | Type: Boolean | |||
Mandatory: No, default is case-insensitive match. | Mandatory: No, default is case-insensitive match. | |||
Key: match-query-string | Key: match-query-string | |||
Description: Flag indicating whether or not the query string | Description: Flag indicating whether or not the query string | |||
should be included in the pattern match. | should be included in the pattern match. | |||
Type: Boolean | Type: Boolean | |||
Mandatory: No, default is not to include query. | Mandatory: No, default is not to include query. | |||
Example of case-sensitive prefix match against | Example of case-sensitive prefix match against | |||
"http://www.example.com/trailers/": | "http://www.example.com/trailers/": | |||
{ | { | |||
"pattern": "http://www.example.com/trailers/*", | "pattern": "http://www.example.com/trailers/*", | |||
"case-sensitive": true | "case-sensitive": true | |||
} | } | |||
6.1.4. ErrorDesc | 6.1.4. ErrorDesc | |||
ErrorDesc shall be encoded as a JSON object with the following keys: | ErrorDesc is encoded as a JSON object with the following keys: | |||
Key: error | Key: error | |||
Type: ErrorCode | Type: ErrorCode | |||
Mandatory: Yes | Mandatory: Yes | |||
Keys: metadata.urls, content.urls | Keys: metadata.urls, content.urls | |||
Type: Array of strings | Type: Array of strings | |||
Mandatory: At least one of metadata.* or content.* must be | ||||
Mandatory: At least one of metadata.* or content.* MUST be | ||||
present. | present. | |||
Keys: metadata.patterns, content.patterns | Keys: metadata.patterns, content.patterns | |||
Type: Array of PatternMatch | Type: Array of PatternMatch | |||
Mandatory: At least one of metadata.* or content.* must be | ||||
Mandatory: At least one of metadata.* or content.* MUST be | ||||
present. | present. | |||
Key: description | Key: description | |||
Type: String | Type: String | |||
Mandatory: No. | Mandatory: No. | |||
6.1.5. ErrorCode | 6.1.5. ErrorCode | |||
One of the strings "EMETA", "ECONTENT", "EPERM", "EREJECT" or "ECDN". | One of the strings "EMETA", "ECONTENT", "EPERM", "EREJECT" or "ECDN". | |||
6.1.6. Relationship | ||||
The key "_links" in a dictionary object may be used to define | ||||
ralationships to other resources. Keys of the "_links" dictionary | ||||
are link relation types, the value for each relation type can either | ||||
be a Link Object or an array of Link Objects. | ||||
The relation type "self" SHOULD be included, with the target being | ||||
the containing resource. | ||||
6.1.7. Link Object | ||||
A Link Object is a JSON dictionary containing the following keys: | ||||
o "href" - With a value containing the URI of the of the addressable | ||||
object being referenced. The "href" must be specified. | ||||
o "type" - The MIME Media Type of the referenced object. It is | ||||
optional to specify "type". See Section 6.2 for the MIME Media | ||||
Types of objects specified in this document. | ||||
6.2. MIME Media Types | 6.2. MIME Media Types | |||
Table 1 lists the MIME Media Type for the trigger request, and each | Table 1 lists the MIME Media Type for the trigger request, and each | |||
trigger object (resource) that is retrievable through the CI/T | trigger object (resource) that is retrievable through the CI/T | |||
interface. | interface. | |||
+-------------------+--------------------------------------------+ | +-------------------+--------------------------------------------+ | |||
| Data Object | MIME Media Type | | | Data Object | MIME Media Type | | |||
+-------------------+--------------------------------------------+ | +-------------------+--------------------------------------------+ | |||
| TriggerRequest | application/cdni.ci.TriggerRequest+json | | | TriggerRequest | application/cdni.ci.TriggerRequest+json | | |||
skipping to change at page 20, line 44 | skipping to change at page 22, line 35 | |||
7. Examples | 7. Examples | |||
The following sections provide examples of different CI/T objects | The following sections provide examples of different CI/T objects | |||
encoded as JSON. | encoded as JSON. | |||
No authentication is shown in the following illustrative examples, it | No authentication is shown in the following illustrative examples, it | |||
is anticipated that authentication mechanisms will be aligned with | is anticipated that authentication mechanisms will be aligned with | |||
other CDNI Interfaces as and when those mechanisms are defined. | other CDNI Interfaces as and when those mechanisms are defined. | |||
Discovery of the triggers interface is out of scope of this document. | Discovery of the triggers interface is out of scope of this document. | |||
In an implementation, all URLs are under control of dCDN and the uCDN | In an implementation, all URLs are under the control of the dCDN. | |||
must not attempt to ascribe any meaning to individual elements of the | The uCDN MUST NOT attempt to ascribe any meaning to individual | |||
path. In examples in this section, the following URLs are used as | elements of the path. In examples in this section, the following | |||
the location of the collections of triggers: | URLs are used as the location of the collections of triggers: | |||
o Collection of all Triggers belonging to one uCDN: | o Collection of all Triggers belonging to one uCDN: | |||
http://dcdn.example.com/triggers | http://dcdn.example.com/triggers | |||
o Filtered collections: | o Filtered collections: | |||
Pending: http://dcdn.example.com/triggers/pending | Pending: http://dcdn.example.com/triggers/pending | |||
Active: http://dcdn.example.com/triggers/active | Active: http://dcdn.example.com/triggers/active | |||
Complete: http://dcdn.example.com/triggers/complete | Complete: http://dcdn.example.com/triggers/complete | |||
Failed: http://dcdn.example.com/triggers/failed | Failed: http://dcdn.example.com/triggers/failed | |||
7.1. Creating Triggers | 7.1. Creating Triggers | |||
Examples of uCDN triggering activity in dCDN: | Examples of uCDN triggering activity in dCDN: | |||
7.1.1. Preposition | 7.1.1. Preposition | |||
An example of a preposition request, a POST to the "AllTriggers" | An example of a preposition request, a POST to the "AllTriggers" | |||
collection. | collection. | |||
skipping to change at page 21, line 49 | skipping to change at page 23, line 43 | |||
"http://www.example.com/a/b/c/2", | "http://www.example.com/a/b/c/2", | |||
"http://www.example.com/a/b/c/3", | "http://www.example.com/a/b/c/3", | |||
"http://www.example.com/a/b/c/4" | "http://www.example.com/a/b/c/4" | |||
] | ] | |||
} | } | |||
} | } | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
Date: Mon, 11 Nov 2013 03:28:27 GMT | Date: Wed, 02 Jul 2014 18:57:19 GMT | |||
Content-Length: 472 | Content-Length: 472 | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
Location: http://dcdn.example.com/triggers/0 | Location: http://dcdn.example.com/triggers/0 | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
{ | { | |||
"ctime": 1384140507, | "ctime": 1404327439, | |||
"etime": 1384140515, | "etime": 1404327447, | |||
"mtime": 1384140507, | "mtime": 1404327439, | |||
"status": "pending", | "status": "pending", | |||
"trigger": { | "trigger": { | |||
"content.urls": [ | "content.urls": [ | |||
"http://www.example.com/a/b/c/1", | "http://www.example.com/a/b/c/1", | |||
"http://www.example.com/a/b/c/2", | "http://www.example.com/a/b/c/2", | |||
"http://www.example.com/a/b/c/3", | "http://www.example.com/a/b/c/3", | |||
"http://www.example.com/a/b/c/4" | "http://www.example.com/a/b/c/4" | |||
], | ], | |||
"metadata.urls": [ | "metadata.urls": [ | |||
"http://metadata.example.com/a/b/c" | "http://metadata.example.com/a/b/c" | |||
], | ], | |||
"type": "preposition" | "type": "preposition" | |||
} | } | |||
} | } | |||
7.1.2. Invalidate | 7.1.2. Invalidate | |||
An example of an invalidate request, another POST to the | An example of an invalidate request, another POST to the | |||
"AllTriggers" collection. This instructs dCDN to re-validate the | "AllTriggers" collection. This instructs the dCDN to re-validate the | |||
content at "http://www.example.com/a/index.html", as well as any | content at "http://www.example.com/a/index.html", as well as any | |||
metadata and content whose URLs are prefixed by | metadata and content whose URLs are prefixed by | |||
"http://metadata.example.com/a/b/" and "http://www.example.com/a/b/" | "http://metadata.example.com/a/b/" and "http://www.example.com/a/b/" | |||
respectively, using case-insensitive matching. | respectively, using case-insensitive matching. | |||
REQUEST: | REQUEST: | |||
POST /triggers HTTP/1.1 | POST /triggers HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
Content-Type: application/cdni.ci.TriggerRequest+json | Content-Type: application/cdni.ci.TriggerRequest+json | |||
Content-Length: 352 | Content-Length: 352 | |||
{ | { | |||
skipping to change at page 23, line 9 | skipping to change at page 25, line 4 | |||
{ "pattern" : "http://metadata.example.com/a/b/*" } | { "pattern" : "http://metadata.example.com/a/b/*" } | |||
], | ], | |||
"content.urls" : [ "http://www.example.com/a/index.html" ], | "content.urls" : [ "http://www.example.com/a/index.html" ], | |||
"content.patterns" : [ | "content.patterns" : [ | |||
{ "pattern" : "http://www.example.com/a/b/*", | { "pattern" : "http://www.example.com/a/b/*", | |||
"case-sensitive" : true | "case-sensitive" : true | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Length: 551 | Content-Length: 551 | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
Location: http://dcdn.example.com/triggers/1 | Location: http://dcdn.example.com/triggers/1 | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
{ | { | |||
"ctime": 1384140508, | "ctime": 1404327440, | |||
"etime": 1384140516, | "etime": 1404327448, | |||
"mtime": 1384140508, | "mtime": 1404327440, | |||
"status": "pending", | "status": "pending", | |||
"trigger": { | "trigger": { | |||
"content.patterns": [ | "content.patterns": [ | |||
{ | { | |||
"case-sensitive": true, | "case-sensitive": true, | |||
"pattern": "http://www.example.com/a/b/*" | "pattern": "http://www.example.com/a/b/*" | |||
} | } | |||
], | ], | |||
"content.urls": [ | "content.urls": [ | |||
"http://www.example.com/a/index.html" | "http://www.example.com/a/index.html" | |||
skipping to change at page 23, line 46 | skipping to change at page 25, line 42 | |||
{ | { | |||
"pattern": "http://metadata.example.com/a/b/*" | "pattern": "http://metadata.example.com/a/b/*" | |||
} | } | |||
], | ], | |||
"type": "invalidate" | "type": "invalidate" | |||
} | } | |||
} | } | |||
7.2. Examining Trigger Status | 7.2. Examining Trigger Status | |||
Once triggers have been created, uCDN can check their status as shown | Once triggers have been created, the uCDN can check their status as | |||
in these examples. | shown in these examples. | |||
7.2.1. Collection of All Triggers | 7.2.1. Collection of All Triggers | |||
The uCDN can fetch the set of all the triggers it has created and | The uCDN can fetch the set of all the triggers it has created and | |||
which have not yet been deleted or removed as expired. After | which have not yet been deleted or removed as expired. After | |||
creation of the "preposition" and "invalidate" triggers shown above, | creation of the "preposition" and "invalidate" triggers shown above, | |||
this collection might look as follows: | this collection might look as follows: | |||
REQUEST: | REQUEST: | |||
GET /triggers HTTP/1.1 | GET /triggers HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
skipping to change at page 24, line 21 | skipping to change at page 26, line 15 | |||
REQUEST: | REQUEST: | |||
GET /triggers HTTP/1.1 | GET /triggers HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 489 | Content-Length: 153 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "8477575226503289820" | Etag: "9179988753593038498" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"Trigger": [ | "triggers": [ | |||
{ | "http://dcdn.example.com/triggers/0", | |||
"href": "http://dcdn.example.com/triggers/0", | "http://dcdn.example.com/triggers/1" | |||
"type": "application/cdni.ci.TriggerStatus+json" | ] | |||
}, | ||||
{ | ||||
"href": "http://dcdn.example.com/triggers/1", | ||||
"type": "application/cdni.ci.TriggerStatus+json" | ||||
} | ||||
], | ||||
"self": { | ||||
"href": "http://dcdn.example.com/triggers" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
7.2.2. Filtered Collections of Triggers | 7.2.2. Filtered Collections of Triggers | |||
The filtered collections are also available to uCDN. Before dCDN | The filtered collections are also available to uCDN. Before the dCDN | |||
starts processing the two triggers shown above, both will appear in | starts processing the two triggers shown above, both will appear in | |||
the collection of Pending Triggers, for example: | the collection of Pending Triggers, for example: | |||
REQUEST: | ||||
RREQUEST: | ||||
GET /triggers/pending HTTP/1.1 | GET /triggers/pending HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 497 | Content-Length: 153 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "-4197252672546627852" | Etag: "5012053611544832286" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"Trigger": [ | "triggers": [ | |||
{ | "http://dcdn.example.com/triggers/0", | |||
"href": "http://dcdn.example.com/triggers/0", | "http://dcdn.example.com/triggers/1" | |||
"type": "application/cdni.ci.TriggerStatus+json" | ] | |||
}, | ||||
{ | ||||
"href": "http://dcdn.example.com/triggers/1", | ||||
"type": "application/cdni.ci.TriggerStatus+json" | ||||
} | ||||
], | ||||
"self": { | ||||
"href": "http://dcdn.example.com/triggers/pending" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
At this point, if no other triggers had been created, the other | At this point, if no other triggers had been created, the other | |||
filtered views of the triggers would be empty. For example: | filtered views of the triggers would be empty. For example: | |||
REQUEST: | REQUEST: | |||
GET /triggers/complete HTTP/1.1 | GET /triggers/complete HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 151 | Content-Length: 56 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "-3759884165278932652" | Etag: "2986340333785000363" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"self": { | "triggers": [] | |||
"href": "http://dcdn.example.com/triggers/complete" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
7.2.3. Trigger Status Resources | 7.2.3. Trigger Status Resources | |||
The Trigger Status Resources can also be examined for detail about | The Trigger Status Resources can also be examined for detail about | |||
individual triggers. For example, for the "preposition" and | individual triggers. For example, for the "preposition" and | |||
"invalidate" triggers from previous examples: | "invalidate" triggers from previous examples: | |||
REQUEST: | REQUEST: | |||
GET /triggers/0 HTTP/1.1 | GET /triggers/0 HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 472 | Content-Length: 472 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "4936922742974586536" | Etag: "-3651695664007658154" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
{ | { | |||
"ctime": 1384140507, | "ctime": 1404327439, | |||
"etime": 1384140515, | "etime": 1404327447, | |||
"mtime": 1384140507, | "mtime": 1404327439, | |||
"status": "pending", | "status": "pending", | |||
"trigger": { | "trigger": { | |||
"content.urls": [ | "content.urls": [ | |||
"http://www.example.com/a/b/c/1", | "http://www.example.com/a/b/c/1", | |||
"http://www.example.com/a/b/c/2", | "http://www.example.com/a/b/c/2", | |||
"http://www.example.com/a/b/c/3", | "http://www.example.com/a/b/c/3", | |||
"http://www.example.com/a/b/c/4" | "http://www.example.com/a/b/c/4" | |||
], | ], | |||
"metadata.urls": [ | "metadata.urls": [ | |||
"http://metadata.example.com/a/b/c" | "http://metadata.example.com/a/b/c" | |||
skipping to change at page 28, line 16 | skipping to change at page 30, line 16 | |||
GET /triggers/1 HTTP/1.1 | GET /triggers/1 HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 551 | Content-Length: 551 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "-4441420523993853535" | Etag: "-7664987687828084413" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
{ | { | |||
"ctime": 1384140508, | "ctime": 1404327440, | |||
"etime": 1384140516, | "etime": 1404327448, | |||
"mtime": 1384140508, | "mtime": 1404327440, | |||
"status": "pending", | "status": "pending", | |||
"trigger": { | "trigger": { | |||
"content.patterns": [ | "content.patterns": [ | |||
{ | { | |||
"case-sensitive": true, | "case-sensitive": true, | |||
"pattern": "http://www.example.com/a/b/*" | "pattern": "http://www.example.com/a/b/*" | |||
} | } | |||
], | ], | |||
"content.urls": [ | "content.urls": [ | |||
"http://www.example.com/a/index.html" | "http://www.example.com/a/index.html" | |||
skipping to change at page 29, line 11 | skipping to change at page 31, line 11 | |||
The uCDN may use the Entity Tags of collections or resources when | The uCDN may use the Entity Tags of collections or resources when | |||
polling for change in status, as shown in the following examples: | polling for change in status, as shown in the following examples: | |||
REQUEST: | REQUEST: | |||
GET /triggers/pending HTTP/1.1 | GET /triggers/pending HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
If-None-Match: "-4197252672546627852" | If-None-Match: "5012053611544832286" | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 304 Not Modified | HTTP/1.1 304 Not Modified | |||
Content-Length: 0 | Content-Length: 0 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "-4197252672546627852" | Etag: "5012053611544832286" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
REQUEST: | REQUEST: | |||
GET /triggers/0 HTTP/1.1 | GET /triggers/0 HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
If-None-Match: "4936922742974586536" | If-None-Match: "-3651695664007658154" | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 304 Not Modified | HTTP/1.1 304 Not Modified | |||
Content-Length: 0 | Content-Length: 0 | |||
Expires: Mon, 11 Nov 2013 03:29:28 GMT | Expires: Wed, 02 Jul 2014 18:58:20 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "4936922742974586536" | Etag: "-3651695664007658154" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:28 GMT | Date: Wed, 02 Jul 2014 18:57:20 GMT | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
When the triggered activity is complete, the contents of the filtered | When the triggered activity is complete, the contents of the filtered | |||
collections will be updated, along with their Entity Tags. For | collections will be updated, along with their Entity Tags. For | |||
example, when the two example triggers are complete, the collections | example, when the two example triggers are complete, the collections | |||
of pending and complete triggers may look like: | of pending and complete triggers may look like: | |||
REQUEST: | REQUEST: | |||
GET /triggers/pending HTTP/1.1 | GET /triggers/pending HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 150 | Content-Length: 56 | |||
Expires: Mon, 11 Nov 2013 03:29:39 GMT | Expires: Wed, 02 Jul 2014 18:58:24 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "-8587750650096537234" | Etag: "-4471185573414616962" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:39 GMT | Date: Wed, 02 Jul 2014 18:57:24 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"self": { | "triggers": [] | |||
"href": "http://dcdn.example.com/triggers/pending" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
REQUEST: | REQUEST: | |||
GET /triggers/complete HTTP/1.1 | GET /triggers/complete HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 498 | Content-Length: 153 | |||
Expires: Mon, 11 Nov 2013 03:29:39 GMT | Expires: Wed, 02 Jul 2014 18:58:31 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "2680225545549998872" | Etag: "-1508172875796647067" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:39 GMT | Date: Wed, 02 Jul 2014 18:57:31 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"Trigger": [ | "triggers": [ | |||
{ | "http://dcdn.example.com/triggers/0", | |||
"href": "http://dcdn.example.com/triggers/0", | "http://dcdn.example.com/triggers/1" | |||
"type": "application/cdni.ci.TriggerStatus+json" | ] | |||
}, | ||||
{ | ||||
"href": "http://dcdn.example.com/triggers/1", | ||||
"type": "application/cdni.ci.TriggerStatus+json" | ||||
} | ||||
], | ||||
"self": { | ||||
"href": "http://dcdn.example.com/triggers/complete" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
7.2.5. Cancelling or Removing a Trigger | 7.2.5. Cancelling or Removing a Trigger | |||
To request dCDN to cancel a Trigger, uCDN may delete the Trigger | To request the dCDN to cancel a Trigger, the uCDN may delete the | |||
Resource. It may also delete completed and failed triggers to reduce | Trigger Resource. It may also delete completed and failed triggers | |||
the size of the collections. For example, to remove the | to reduce the size of the collections. For example, to remove the | |||
"preposition" request from earlier examples: | "preposition" request from earlier examples: | |||
REQUEST: | REQUEST: | |||
DELETE /triggers/0 HTTP/1.1 | DELETE /triggers/0 HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 204 No Content | HTTP/1.1 204 No Content | |||
Date: Mon, 11 Nov 2013 03:28:39 GMT | Date: Wed, 02 Jul 2014 18:57:31 GMT | |||
Content-Length: 0 | Content-Length: 0 | |||
Content-Type: text/html; charset=UTF-8 | Content-Type: text/html; charset=UTF-8 | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
This would, for example, cause the collection of completed triggers | This would, for example, cause the collection of completed triggers | |||
shown in the example above to be updated to: | shown in the example above to be updated to: | |||
REQUEST: | REQUEST: | |||
GET /triggers/complete HTTP/1.1 | GET /triggers/complete HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 304 | Content-Length: 106 | |||
Expires: Mon, 11 Nov 2013 03:29:39 GMT | Expires: Wed, 02 Jul 2014 18:58:31 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "535044172999094664" | Etag: "-1842390246836476263" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:39 GMT | Date: Wed, 02 Jul 2014 18:57:31 GMT | |||
Content-Type: application/cdni.ci.TriggerCollection+json | Content-Type: application/cdni.ci.TriggerCollection+json | |||
{ | { | |||
"_links": { | "staleresourcetime": 86400, | |||
"Trigger": { | "triggers": [ | |||
"href": "http://dcdn.example.com/triggers/1", | "http://dcdn.example.com/triggers/1" | |||
"type": "application/cdni.ci.TriggerStatus+json" | ] | |||
}, | ||||
"self": { | ||||
"href": "http://dcdn.example.com/triggers/complete" | ||||
} | ||||
}, | ||||
"staleresourcetime": 86400 | ||||
} | } | |||
7.2.6. Error Reporting | 7.2.6. Error Reporting | |||
In this example uCDN has requested prepositioning of | In this example the uCDN has requested prepositioning of | |||
"http://newsite.example.com/index.html", but dCDN was unable to | "http://newsite.example.com/index.html", but the dCDN was unable to | |||
locate metadata for that site: | locate metadata for that site: | |||
REQUEST: | REQUEST: | |||
GET /triggers/2 HTTP/1.1 | GET /triggers/2 HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: dcdn.example.com | Host: dcdn.example.com | |||
Accept: */* | Accept: */* | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 505 | Content-Length: 505 | |||
Expires: Mon, 11 Nov 2013 03:29:43 GMT | Expires: Wed, 02 Jul 2014 19:16:48 GMT | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
ETag: "3841389629056746224" | Etag: "-6310233270471598826" | |||
Cache-Control: max-age=60 | Cache-Control: max-age=60 | |||
Date: Mon, 11 Nov 2013 03:28:43 GMT | Date: Wed, 02 Jul 2014 19:15:48 GMT | |||
Content-Type: application/cdni.ci.TriggerStatus+json | Content-Type: application/cdni.ci.TriggerStatus+json | |||
{ | { | |||
"ctime": 1384140519, | "ctime": 1404328544, | |||
"errors": [ | "errors": [ | |||
{ | { | |||
"content.urls": [ | "content.urls": [ | |||
"http://newsite.example.com/index.html" | "http://newsite.example.com/index.html" | |||
], | ], | |||
"description": | "description": | |||
"No HostIndex entry found for newsite.example.com", | "No HostIndex entry found for newsite.example.com", | |||
"error": "EMETA" | "error": "EMETA" | |||
} | } | |||
], | ], | |||
"etime": 1384140527, | "etime": 1404328552, | |||
"mtime": 1384140523, | "mtime": 1404328548, | |||
"status": "active", | "status": "active", | |||
"trigger": { | "trigger": { | |||
"content.urls": [ | "content.urls": [ | |||
"http://newsite.example.com/index.html" | "http://newsite.example.com/index.html" | |||
], | ], | |||
"type": "preposition" | "type": "preposition" | |||
} | } | |||
} | } | |||
8. IANA Considerations | 8. IANA Considerations | |||
skipping to change at page 35, line 4 | skipping to change at page 36, line 6 | |||
"status": "active", | "status": "active", | |||
"trigger": { | "trigger": { | |||
"content.urls": [ | "content.urls": [ | |||
"http://newsite.example.com/index.html" | "http://newsite.example.com/index.html" | |||
], | ], | |||
"type": "preposition" | "type": "preposition" | |||
} | } | |||
} | } | |||
8. IANA Considerations | 8. IANA Considerations | |||
8.1. CI/T MIME Media Types | 8.1. CI/T MIME Media Types | |||
The IANA is requested to allocate the following MIME Media Types in | The IANA is requested to allocate the following MIME Media Types in | |||
the MIME Media Types registry: | the MIME Media Types registry: | |||
o application/cdni.ci.TriggerRequest | o application/cdni.ci.TriggerRequest | |||
o application/cdni.ci.TriggerStatus | o application/cdni.ci.TriggerStatus | |||
o application/cdni.ci.TriggerCollection | o application/cdni.ci.TriggerCollection | |||
Use of these types is specified in Section 6.2 of the present | Use of these types is specified in Section 6.2 of the present | |||
document. | document. | |||
9. Security Considerations | 9. Security Considerations | |||
The dCDN must ensure that each uCDN only has access to its own | 9.1. Authentication, Confidentiality, Integrity Protection | |||
Trigger Status Resources. | ||||
It is anticipated that a common authentication mechanism will be used | A CI/T dCDN server implementation MUST support TLS transport for HTTP | |||
by this and other CDNI Interconnect interfaces, the mechanism must | (https) as per [RFC2818]. The use of TLS for transport of the CI/T | |||
exist but is not identified in this document. | interface allows the dCDN and the uCDN to authenticate each other (to | |||
ensure they are receiving trigger requests from, or reporting status | ||||
to, an authenticated CDN). | ||||
The dCDN must ensure that activity triggered by uCDN only affects | HTTP requests that attempt to access or operate on CI/T data | |||
metadata or content originating from that uCDN. | belonging to another CDN MUST be rejected using either HTTP "403 | |||
Forbidden" or "404 Not Found". (Note that in a "diamond" | ||||
configuration, where one uCDN's content can be acquired via more than | ||||
one directly-connected uCDN, it may not be possible for the dCDN to | ||||
determine from which uCDN it acquired content. In this case, it MUST | ||||
allow each upstream that may have been responsible for acquisition of | ||||
that content to act upon it using trigger requests.) | ||||
Trigger creation requests that attempt to operate on metadata or | ||||
content not acquired from the uCDN making the request MUST be | ||||
rejected. The rejection can either be signalled to dCDN using HTTP | ||||
"403 Forbidden" or "404 Not Found", or a Trigger Status Resource can | ||||
be created with an ErrorDesc value of EPERM for any affected URLs. | ||||
In an environment where any such protection is required, TLS SHOULD | ||||
be used for transport of the CI/T requests and responses, unless | ||||
alternate methods are used for ensuring that only authorised clients | ||||
are able to access their own data (such as setting up an IPsec tunnel | ||||
between the two CDNs, or using a physically secured internal network | ||||
between two CDNs that are owned by the same corporate entity). Both | ||||
parties of the transaction (the uCDN and the dCDN) SHOULD use mutual | ||||
authentication. | ||||
A CI/T implementation MUST support the | ||||
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 cipher suite ([RFC5288]). An | ||||
implementation of the CI/T Interface SHOULD prefer cipher suites | ||||
which support perfect forward secrecy over cipher suites that don't. | ||||
9.2. Denial of Service | ||||
This document does not define a specific mechanism to protect against | ||||
Denial of Service (DoS) attacks on the CI/T. However, CI/T endpoints | ||||
can be protected against DoS attacks through the use of TLS transport | ||||
and/or via mechanisms outside the scope of the CI/T interface, such | ||||
as firewalling or use of Virtual Private Networks (VPNs). | ||||
10. Acknowledgements | 10. Acknowledgements | |||
The structure of the Relationship and Link Objects specified in | The authors thank Kevin Ma for his ongoing input. | |||
Section 6 is based on Mike Kelly's work on JSON Hypertext Application | ||||
Language. | ||||
11. References | 11. References | |||
11.1. Normative 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. | |||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
[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, | Resource Identifier (URI): Generic Syntax", STD 66, RFC | |||
RFC 3986, January 2005. | 3986, January 2005. | |||
[RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data | ||||
Interchange Format", RFC 7159, March 2014. | ||||
[RFC7231] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol | ||||
(HTTP/1.1): Semantics and Content", RFC 7231, June 2014. | ||||
[RFC7232] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol | ||||
(HTTP/1.1): Conditional Requests", RFC 7232, June 2014. | ||||
11.2. Informative References | 11.2. Informative References | |||
[I-D.ietf-cdni-framework] | [I-D.ietf-cdni-framework] | |||
Peterson, L. and B. Davie, "Framework for CDN | Peterson, L., Davie, B., and R. Brandenburg, "Framework | |||
Interconnection", draft-ietf-cdni-framework-07 (work in | for CDN Interconnection", draft-ietf-cdni-framework-14 | |||
progress), November 2013. | (work in progress), June 2014. | |||
[I-D.ietf-cdni-metadata] | [I-D.ietf-cdni-metadata] | |||
Niven-Jenkins, B., Murray, R., Watson, G., Caulfield, M., | Niven-Jenkins, B., Murray, R., Watson, G., Caulfield, M., | |||
Leung, K., and K. Ma, "CDN Interconnect Metadata", | Leung, K., and K. Ma, "CDN Interconnect Metadata", draft- | |||
draft-ietf-cdni-metadata-03 (work in progress), | ietf-cdni-metadata-06 (work in progress), February 2014. | |||
October 2013. | ||||
[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", | Interconnection (CDNI) Requirements", draft-ietf-cdni- | |||
draft-ietf-cdni-requirements-13 (work in progress), | requirements-17 (work in progress), January 2014. | |||
November 2013. | ||||
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. | ||||
[RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | |||
Syndication Format", RFC 4287, December 2005. | Syndication Format", RFC 4287, December 2005. | |||
[RFC5288] Salowey, J., Choudhury, A., and D. McGrew, "AES Galois | ||||
Counter Mode (GCM) Cipher Suites for TLS", RFC 5288, | ||||
August 2008. | ||||
[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. | |||
Authors' Addresses | Authors' Addresses | |||
End of changes. 255 change blocks. | ||||
495 lines changed or deleted | 611 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/ |