Internet Engineering Task Force (IETF)                         R. Murray
Request for Comments: 8007                              B. Niven-Jenkins
Category: Standards Track                                          Nokia
ISSN: 2070-1721                                            December 2016
        
Internet Engineering Task Force (IETF)                         R. Murray
Request for Comments: 8007                              B. Niven-Jenkins
Category: Standards Track                                          Nokia
ISSN: 2070-1721                                            December 2016
        

Content Delivery Network Interconnection (CDNI) Control Interface / Triggers

内容交付网络互连(CDNI)控制接口/触发器

Abstract

摘要

This document describes the part of the Content Delivery Network Interconnection (CDNI) Control interface that allows a CDN to trigger activity in an interconnected CDN that is configured to deliver content on its behalf. The upstream CDN can use this mechanism to request that the downstream CDN pre-position metadata or content or to request that it invalidate or purge metadata or content. The upstream CDN can monitor the status of activity that it has triggered in the downstream CDN.

本文档描述了内容交付网络互连(CDNI)控制接口的一部分,该接口允许CDN触发互连CDN中的活动,该互连CDN被配置为代表其交付内容。上游CDN可以使用此机制请求下游CDN预先定位元数据或内容,或者请求其使元数据或内容无效或清除。上游CDN可以监控其在下游CDN中触发的活动状态。

Status of This Memo

关于下段备忘

This is an Internet Standards Track document.

这是一份互联网标准跟踪文件。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。有关互联网标准的更多信息,请参见RFC 7841第2节。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc8007.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问http://www.rfc-editor.org/info/rfc8007.

Copyright Notice

版权公告

Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2016 IETF信托基金和确定为文件作者的人员。版权所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(http://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文件中提取的代码组件必须包括信托法律条款第4.e节中所述的简化BSD许可证文本,并提供简化BSD许可证中所述的无担保。

Table of Contents

目录

   1. Introduction ....................................................3
      1.1. Terminology ................................................4
   2. Model for CDNI Triggers .........................................4
      2.1. Timing of Triggered Activity ...............................6
      2.2. Scope of Triggered Activity ................................7
           2.2.1. Multiple Interconnected CDNs ........................7
      2.3. Trigger Results ............................................8
   3. Collections of Trigger Status Resources .........................9
   4. CDNI Trigger Interface .........................................10
      4.1. Creating Triggers .........................................11
      4.2. Checking Status ...........................................12
           4.2.1. Polling Trigger Status Resource Collections ........12
           4.2.2. Polling Trigger Status Resources ...................13
      4.3. Canceling Triggers ........................................13
      4.4. Deleting Triggers .........................................14
      4.5. Expiry of Trigger Status Resources ........................14
      4.6. Loop Detection and Prevention .............................15
      4.7. Error Handling ............................................15
      4.8. Content URLs ..............................................16
   5. CI/T Object Properties and Encoding ............................17
      5.1. CI/T Objects ..............................................17
           5.1.1. CI/T Commands ......................................17
           5.1.2. Trigger Status Resources ...........................18
           5.1.3. Trigger Collections ................................20
      5.2. Properties of CI/T Objects ................................21
           5.2.1. Trigger Specification ..............................21
           5.2.2. Trigger Type .......................................23
           5.2.3. Trigger Status .....................................24
           5.2.4. PatternMatch .......................................24
           5.2.5. Absolute Time ......................................25
           5.2.6. Error Description ..................................26
           5.2.7. Error Code .........................................26
   6. Examples .......................................................27
      6.1. Creating Triggers .........................................28
           6.1.1. Preposition ........................................28
           6.1.2. Invalidate .........................................30
      6.2. Examining Trigger Status ..................................32
           6.2.1. Collection of All Triggers .........................32
           6.2.2. Filtered Collections of Trigger Status Resources ...33
           6.2.3. Individual Trigger Status Resources ................34
           6.2.4. Polling for Changes in Status ......................36
           6.2.5. Deleting Trigger Status Resources ..................38
           6.2.6. Error Reporting ....................................39
        
   1. Introduction ....................................................3
      1.1. Terminology ................................................4
   2. Model for CDNI Triggers .........................................4
      2.1. Timing of Triggered Activity ...............................6
      2.2. Scope of Triggered Activity ................................7
           2.2.1. Multiple Interconnected CDNs ........................7
      2.3. Trigger Results ............................................8
   3. Collections of Trigger Status Resources .........................9
   4. CDNI Trigger Interface .........................................10
      4.1. Creating Triggers .........................................11
      4.2. Checking Status ...........................................12
           4.2.1. Polling Trigger Status Resource Collections ........12
           4.2.2. Polling Trigger Status Resources ...................13
      4.3. Canceling Triggers ........................................13
      4.4. Deleting Triggers .........................................14
      4.5. Expiry of Trigger Status Resources ........................14
      4.6. Loop Detection and Prevention .............................15
      4.7. Error Handling ............................................15
      4.8. Content URLs ..............................................16
   5. CI/T Object Properties and Encoding ............................17
      5.1. CI/T Objects ..............................................17
           5.1.1. CI/T Commands ......................................17
           5.1.2. Trigger Status Resources ...........................18
           5.1.3. Trigger Collections ................................20
      5.2. Properties of CI/T Objects ................................21
           5.2.1. Trigger Specification ..............................21
           5.2.2. Trigger Type .......................................23
           5.2.3. Trigger Status .....................................24
           5.2.4. PatternMatch .......................................24
           5.2.5. Absolute Time ......................................25
           5.2.6. Error Description ..................................26
           5.2.7. Error Code .........................................26
   6. Examples .......................................................27
      6.1. Creating Triggers .........................................28
           6.1.1. Preposition ........................................28
           6.1.2. Invalidate .........................................30
      6.2. Examining Trigger Status ..................................32
           6.2.1. Collection of All Triggers .........................32
           6.2.2. Filtered Collections of Trigger Status Resources ...33
           6.2.3. Individual Trigger Status Resources ................34
           6.2.4. Polling for Changes in Status ......................36
           6.2.5. Deleting Trigger Status Resources ..................38
           6.2.6. Error Reporting ....................................39
        
   7. IANA Considerations ............................................40
      7.1. CDNI Payload Type Parameter Registrations .................40
      7.2. "CDNI CI/T Trigger Types" Registry ........................41
      7.3. "CDNI CI/T Error Codes" Registry ..........................41
   8. Security Considerations ........................................41
      8.1. Authentication, Authorization, Confidentiality,
           Integrity Protection ......................................42
      8.2. Denial of Service .........................................43
      8.3. Privacy ...................................................44
   9. References .....................................................44
      9.1. Normative References ......................................44
      9.2. Informative References ....................................45
   Appendix A. Formalization of the JSON Data ........................47
   Acknowledgments ...................................................49
   Authors' Addresses ................................................49
        
   7. IANA Considerations ............................................40
      7.1. CDNI Payload Type Parameter Registrations .................40
      7.2. "CDNI CI/T Trigger Types" Registry ........................41
      7.3. "CDNI CI/T Error Codes" Registry ..........................41
   8. Security Considerations ........................................41
      8.1. Authentication, Authorization, Confidentiality,
           Integrity Protection ......................................42
      8.2. Denial of Service .........................................43
      8.3. Privacy ...................................................44
   9. References .....................................................44
      9.1. Normative References ......................................44
      9.2. Informative References ....................................45
   Appendix A. Formalization of the JSON Data ........................47
   Acknowledgments ...................................................49
   Authors' Addresses ................................................49
        
1. Introduction
1. 介绍

[RFC6707] introduces the problem scope for Content Delivery Network Interconnection (CDNI) and lists the four categories of interfaces that may be used to compose a CDNI solution (Control, Metadata, Request Routing, and Logging).

[RFC6707]介绍了内容交付网络互连(CDNI)的问题范围,并列出了可用于构成CDNI解决方案的四类接口(控制、元数据、请求路由和日志记录)。

[RFC7336] expands on the information provided in [RFC6707] and describes each of the interfaces and the relationships between them in more detail.

[RFC7336]扩展了[RFC6707]中提供的信息,并更详细地描述了每个接口及其之间的关系。

This document describes the "CI/T" interface -- "CDNI Control interface / Triggers". It does not consider those parts of the Control interface that relate to configuration, bootstrapping, or authentication of CDN Interconnect interfaces. Section 4 of [RFC7337] identifies the requirements specific to the CI/T interface; requirements applicable to the CI/T interface are CI-1 to CI-6.

本文档描述了“CI/T”接口——“CDNI控制接口/触发器”。它不考虑与CDN互连接口的配置、引导或认证有关的控制接口的那些部分。[RFC7337]第4节确定了CI/T接口的特定要求;适用于CI/T接口的要求为CI-1至CI-6。

o Section 2 outlines the model for the CI/T interface at a high level.

o 第2节概述了CI/T接口的高级模型。

o Section 3 describes collections of Trigger Status Resources.

o 第3节描述触发器状态资源的集合。

o Section 4 defines the web service provided by the downstream CDN.

o 第4节定义了下游CDN提供的web服务。

o Section 5 lists properties of CI/T Commands and Status Resources.

o 第5节列出了CI/T命令和状态资源的属性。

o Section 6 contains example messages.

o 第6节包含示例消息。

1.1. Terminology
1.1. 术语

This document reuses the terminology defined in [RFC6707] and uses "uCDN" and "dCDN" as shorthand for "upstream CDN" and "downstream CDN", respectively.

本文件重复使用了[RFC6707]中定义的术语,并分别使用“uCDN”和“dCDN”作为“上游CDN”和“下游CDN”的缩写。

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119].

本文件中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照RFC 2119[RFC2119]中所述进行解释。

2. Model for CDNI Triggers
2. CDNI触发器模型

A CI/T Command, sent from the uCDN to the dCDN, is a request for the dCDN to do some work relating to data associated with content requests originating from the uCDN.

从uCDN发送到dCDN的CI/T命令是请求dCDN执行与源自uCDN的内容请求相关联的数据相关的工作。

There are two types of CI/T Commands: CI/T Trigger Commands and CI/T Cancel Commands. The CI/T Cancel Command can be used to request cancellation of an earlier CI/T Trigger Command. A CI/T Trigger Command is of one of the following types:

有两种类型的CI/T命令:CI/T触发器命令和CI/T取消命令。CI/T Cancel命令可用于请求取消先前的CI/T触发器命令。CI/T触发器命令属于以下类型之一:

o preposition - used to instruct the dCDN to fetch metadata from the uCDN, or content from any origin including the uCDN.

o 介词-用于指示dCDN从uCDN获取元数据,或从任何来源(包括uCDN)获取内容。

o invalidate - used to instruct the dCDN to revalidate specific metadata or content before reusing it.

o invalidate—用于指示dCDN在重用特定元数据或内容之前重新验证该元数据或内容。

o purge - used to instruct the dCDN to delete specific metadata or content.

o 清除-用于指示dCDN删除特定元数据或内容。

The CI/T interface is a web service offered by the dCDN. It allows CI/T Commands to be issued and allows triggered activity to be tracked. The CI/T interface builds on top of HTTP/1.1 [RFC7230]. References to URL in this document relate to HTTP/HTTPS URIs, as defined in Section 2.7 of [RFC7230].

CI/T接口是dCDN提供的web服务。它允许发出CI/T命令,并允许跟踪触发的活动。CI/T接口构建在HTTP/1.1[RFC7230]之上。本文档中对URL的引用与[RFC7230]第2.7节中定义的HTTP/HTTPS URI有关。

When the dCDN accepts a CI/T Command, it creates a resource describing the status of the triggered activity -- a Trigger Status Resource. The uCDN can poll Trigger Status Resources to monitor progress.

当dCDN接受CI/T命令时,它将创建一个描述已触发活动状态的资源——触发器状态资源。uCDN可以轮询触发器状态资源以监视进度。

The dCDN maintains at least one collection of Trigger Status Resources for each uCDN. Each uCDN only has access to its own collections, the locations of which are shared when CDNI is established.

dCDN为每个uCDN维护至少一个触发器状态资源集合。每个uCDN只能访问其自己的集合,在建立CDNI时共享集合的位置。

To trigger activity in the dCDN, the uCDN POSTs a CI/T Command to the collection of Trigger Status Resources. If the dCDN accepts the CI/T Command, it creates a new Trigger Status Resource and returns its location to the uCDN. To monitor progress, the uCDN can GET the Trigger Status Resource. To request cancellation of a CI/T Trigger Command, the uCDN can POST to the collection of Trigger Status Resources or simply delete the Trigger Status Resource.

为了触发dCDN中的活动,uCDN向触发器状态资源集合发布CI/T命令。如果dCDN接受CI/T命令,它将创建一个新的触发器状态资源,并将其位置返回给uCDN。要监视进度,uCDN可以获取触发器状态资源。要请求取消CI/T触发器命令,uCDN可以发布到触发器状态资源集合,或者只删除触发器状态资源。

In addition to the collection of all Trigger Status Resources for the uCDN, the dCDN can maintain filtered views of that collection. These filtered views are defined in Section 3 and include collections of Trigger Status Resources corresponding to active and completed CI/T Trigger Commands. These collections provide a mechanism for polling the status of multiple jobs.

除了uCDN的所有触发器状态资源的集合外,dCDN还可以维护该集合的筛选视图。这些过滤视图在第3节中定义,包括与活动和完成的CI/T触发器命令相对应的触发器状态资源集合。这些集合提供了轮询多个作业状态的机制。

Figure 1 is an example showing the basic message flow used by the uCDN to trigger activity in the dCDN and for the uCDN to discover the status of that activity. Only successful triggering is shown. Examples of the messages are given in Section 6.

图1是一个示例,显示了uCDN用于触发dCDN中的活动以及uCDN用于发现该活动状态的基本消息流。仅显示成功触发。第6节给出了这些信息的示例。

      uCDN                                                   dCDN
       |    (1) POST https://dcdn.example.com/triggers/uCDN    |
      [ ] --------------------------------------------------> [ ]--+
       |                                                      [ ]  | (2)
       |    (3) HTTP 201 Response                             [ ]<-+
      [ ] <-------------------------------------------------- [ ]
       |     Loc: https://dcdn.example.com/triggers/uCDN/123   |
       |                                                       |
       .                           .                           .
       .                           .                           .
       .                           .                           .
       |                                                       |
       |   (4) GET https://dcdn.example.com/triggers/uCDN/123  |
      [ ] --------------------------------------------------> [ ]
       |                                                      [ ]
       |   (5) HTTP 200 Trigger Status Resource               [ ]
      [ ] <-------------------------------------------------- [ ]
       |                                                       |
       |                                                       |
        
      uCDN                                                   dCDN
       |    (1) POST https://dcdn.example.com/triggers/uCDN    |
      [ ] --------------------------------------------------> [ ]--+
       |                                                      [ ]  | (2)
       |    (3) HTTP 201 Response                             [ ]<-+
      [ ] <-------------------------------------------------- [ ]
       |     Loc: https://dcdn.example.com/triggers/uCDN/123   |
       |                                                       |
       .                           .                           .
       .                           .                           .
       .                           .                           .
       |                                                       |
       |   (4) GET https://dcdn.example.com/triggers/uCDN/123  |
      [ ] --------------------------------------------------> [ ]
       |                                                      [ ]
       |   (5) HTTP 200 Trigger Status Resource               [ ]
      [ ] <-------------------------------------------------- [ ]
       |                                                       |
       |                                                       |
        

Figure 1: Basic CDNI Message Flow for Triggers

图1:触发器的基本CDNI消息流

The steps in Figure 1 are as follows:

图1中的步骤如下所示:

1. The uCDN triggers action in the dCDN by POSTing a CI/T Command to a collection of Trigger Status Resources -- "https://dcdn.example.com/triggers/uCDN". This URL was given to the uCDN when the CI/T interface was established.

1. uCDN通过向触发器状态资源集合发布CI/T命令来触发dCDN中的操作--“https://dcdn.example.com/triggers/uCDN". 此URL在建立CI/T接口时提供给uCDN。

2. The dCDN authenticates the request, validates the CI/T Command, and, if it accepts the request, creates a new Trigger Status Resource.

2. dCDN验证请求,验证CI/T命令,如果接受请求,则创建新的触发器状态资源。

3. The dCDN responds to the uCDN with an HTTP 201 response status and the location of the Trigger Status Resource.

3. dCDN使用HTTP 201响应状态和触发器状态资源的位置响应uCDN。

4. The uCDN can poll, possibly repeatedly, the Trigger Status Resource in the dCDN.

4. uCDN可能会重复轮询dCDN中的触发器状态资源。

5. The dCDN responds with the Trigger Status Resource, describing the progress or results of the CI/T Trigger Command.

5. dCDN使用触发器状态资源进行响应,描述CI/T触发器命令的进度或结果。

The remainder of this document describes the messages, Trigger Status Resources, and collections of Trigger Status Resources in more detail.

本文档的其余部分将更详细地描述消息、触发器状态资源和触发器状态资源集合。

2.1. Timing of Triggered Activity
2.1. 触发活动的时间安排

Timing of the execution of CI/T Commands is under the dCDN's control, including its start time and pacing of the activity in the network.

CI/T命令的执行时间由dCDN控制,包括其启动时间和网络中活动的步调。

CI/T "invalidate" and "purge" commands MUST be applied to all data acquired before the command was accepted by the dCDN. The dCDN SHOULD NOT apply CI/T "invalidate" and "purge" commands to data acquired after the CI/T Command was accepted, but this may not always be achievable, so the uCDN cannot count on that.

CI/T“失效”和“清除”命令必须应用于dCDN接受命令之前获取的所有数据。dCDN不应将CI/T“invalidate”和“purge”命令应用于接受CI/T命令后获取的数据,但这可能并不总是可以实现的,因此uCDN不能依赖于此。

If the uCDN wishes to invalidate or purge content and then immediately pre-position replacement content at the same URLs, it SHOULD ensure that the dCDN has completed the invalidate/purge before initiating the pre-positioning. Otherwise, there is a risk that the dCDN pre-positions the new content, then immediately invalidates or purges it (as a result of the two uCDN requests running in parallel).

如果uCDN希望使内容无效或清除,然后立即在相同URL上预定位替换内容,则应确保dCDN在启动预定位之前已完成无效/清除。否则,dCDN可能会预先定位新内容,然后立即使其无效或清除(由于两个uCDN请求并行运行)。

Because the CI/T Command timing is under the dCDN's control, the dCDN implementation can choose whether to apply CI/T "invalidate" and "purge" commands to content acquisition that has already started when the command is received.

由于CI/T命令定时由dCDN控制,因此dCDN实现可以选择是否将CI/T“失效”和“清除”命令应用于接收到命令时已开始的内容获取。

2.2. Scope of Triggered Activity
2.2. 触发活动的范围

Each CI/T Command can operate on multiple metadata and content URLs.

每个CI/T命令都可以对多个元数据和内容URL进行操作。

Multiple representations of an HTTP resource may share the same URL. CI/T Trigger Commands that invalidate or purge metadata or content apply to all resource representations with matching URLs.

HTTP资源的多个表示可能共享同一URL。使元数据或内容无效或清除的CI/T触发器命令应用于具有匹配URL的所有资源表示。

2.2.1. Multiple Interconnected CDNs
2.2.1. 多个互连CDN

In a network of interconnected CDNs, a single uCDN will originate a given item of metadata and associated content. It may distribute that metadata and content to more than one dCDN, which may in turn distribute that metadata and content to CDNs located further downstream.

在互连的CDN网络中,单个uCDN将生成给定的元数据项和相关内容。它可以将该元数据和内容分发给多个dCDN,而dCDN又可以将该元数据和内容分发给位于更下游的CDN。

An intermediate CDN is a dCDN that passes on CDNI Metadata and content to dCDNs located further downstream.

中间CDN是一个dCDN,它将CDNI元数据和内容传递给位于更下游的dCDN。

A "diamond" configuration is one where a dCDN can acquire metadata and content originated in one uCDN from that uCDN itself and an intermediate CDN, or via more than one intermediate CDN.

“菱形”配置是指dCDN可以从一个uCDN本身和一个中间CDN或通过多个中间CDN获取源于该uCDN的元数据和内容的配置。

CI/T Commands originating in the single source uCDN affect metadata and content in all dCDNs; however, in a diamond configuration, it may not be possible for the dCDN to determine which uCDN it acquired content from. In this case, a dCDN MUST allow each uCDN from which it may have acquired the content to act upon that content using CI/T Commands.

源自单一源uCDN的CI/T命令会影响所有DCDN中的元数据和内容;但是,在菱形配置中,dCDN可能无法确定从哪个uCDN获取内容。在这种情况下,dCDN必须允许它可能从中获取内容的每个uCDN使用CI/T命令对该内容进行操作。

In all other cases, a dCDN MUST reject CI/T Commands from a uCDN that attempts to act on another uCDN's content by using, for example, HTTP 403 ("Forbidden").

在所有其他情况下,dCDN必须拒绝来自uCDN的CI/T命令,该uCDN尝试使用HTTP 403(禁用)等对另一个uCDN的内容进行操作。

Security considerations are discussed further in Section 8.

第8节将进一步讨论安全注意事项。

The diamond configuration may lead to inefficient interactions, but the interactions are otherwise harmless. For example:

菱形配置可能会导致低效的交互作用,但这些交互作用在其他方面是无害的。例如:

o When the uCDN issues an "invalidate" CI/T Command, a dCDN will receive that command from multiple directly connected uCDNs. The dCDN may schedule multiple such commands separately, and the last scheduled command may affect content already revalidated following execution of the "invalidate" command that was scheduled first.

o 当uCDN发出“无效”CI/T命令时,dCDN将从多个直接连接的uCDN接收该命令。dCDN可以单独调度多个这样的命令,最后调度的命令可能会影响在执行第一个调度的“invalidate”命令之后已经重新验证的内容。

o If one of a dCDN's directly connected uCDNs loses its rights to distribute content, it may issue a CI/T "purge" command. That purge may affect content the dCDN could retain because it's distributed by another directly connected uCDN. But, that content can be reacquired by the dCDN from the remaining uCDN.

o 如果dCDN的一个直接连接的UCDN失去了分发内容的权限,它可能会发出CI/T“purge”命令。该清除可能会影响dCDN可以保留的内容,因为它是由另一个直接连接的uCDN分发的。但是,dCDN可以从剩余的uCDN重新获取该内容。

o When the uCDN originating an item of content issues a CI/T purge followed by a pre-position, two directly connected uCDNs will pass those commands to a dCDN. That dCDN implementation need not merge those operations or notice the repetition, in which case the purge issued by one uCDN will complete before the other. The first uCDN to finish its purge may then forward the "preposition" trigger, and content pre-positioned as a result might be affected by the still-running purge issued by the other uCDN. However, the dCDN will reacquire that content as needed, or when it's asked to pre-position the content by the second uCDN. A dCDN implementation could avoid this interaction by knowing which uCDN it acquired the content from, or it could minimize the consequences by recording the time at which the "invalidate"/"purge" command was received and not applying it to content acquired after that time.

o 当发起内容项的uCDN发出CI/T清除,然后是预定位时,两个直接连接的uCDN将把这些命令传递给dCDN。dCDN实现不需要合并这些操作或注意重复,在这种情况下,一个uCDN发出的清除将在另一个uCDN之前完成。完成清除的第一个uCDN随后可能会转发“前置”触发器,因此预定位的内容可能会受到另一个uCDN发出的仍在运行的清除的影响。但是,dCDN将根据需要重新获取该内容,或者在第二个uCDN要求它预先定位该内容时重新获取该内容。dCDN实现可以通过知道从哪个uCDN获取内容来避免这种交互,也可以通过记录接收到“invalidate”/“purge”命令的时间而不将其应用于在该时间之后获取的内容来最小化结果。

2.3. Trigger Results
2.3. 触发结果

Possible states for a Trigger Status Resource are defined in Section 5.2.3.

第5.2.3节定义了触发状态资源的可能状态。

The CI/T Trigger Command MUST NOT be reported as "complete" until all actions have been completed successfully. The reasons for failure, and URLs or patterns affected, SHOULD be enumerated in the Trigger Status Resource. For more details, see Section 4.7.

在成功完成所有操作之前,不得将CI/T触发器命令报告为“完成”。失败的原因以及受影响的URL或模式应在触发器状态资源中枚举。有关更多详细信息,请参见第4.7节。

If a dCDN is also acting as a uCDN in a cascade, it MUST forward CI/T Commands to any dCDNs that may be affected. The CI/T Trigger Command MUST NOT be reported as "complete" in a CDN until it is "complete" in all of its dCDNs. If a CI/T Trigger Command is reported as "processed" in any dCDN, intermediate CDNs MUST NOT report "complete"; instead, they MUST also report "processed". A CI/T Command MAY be reported as "failed" as soon as it fails in a CDN or in any of its dCDNs. A canceled CI/T Trigger Command MUST be reported as "cancelling" until it has been reported as "cancelled", "complete", or "failed" by all dCDNs in a cascade.

如果dCDN还充当级联中的uCDN,则它必须将CI/T命令转发给可能受影响的任何dCDN。CI/T触发器命令在CDN中不得报告为“已完成”,直到它在其所有DCDN中“已完成”。如果CI/T触发器命令在任何dCDN中报告为“已处理”,则中间CDN不得报告为“已完成”;相反,他们还必须报告“已处理”。CI/T命令在CDN或其任何DCDN中失败后,可能会立即报告为“失败”。取消的CI/T触发器命令必须报告为“取消”,直到级联中的所有DCDN将其报告为“取消”、“完成”或“失败”。

3. Collections of Trigger Status Resources
3. 触发器状态资源的集合

As described in Section 2, Trigger Status Resources exist in the dCDN to report the status of activity triggered by each uCDN.

如第2节所述,dCDN中存在触发器状态资源,用于报告每个uCDN触发的活动的状态。

A collection of Trigger Status Resources is a resource that contains a reference to each Trigger Status Resource in that collection.

触发器状态资源的集合是包含对该集合中每个触发器状态资源的引用的资源。

The dCDN MUST make a collection of a uCDN's Trigger Status Resources available to that uCDN. This collection includes all of the Trigger Status Resources created for CI/T Commands from the uCDN that have been accepted by the dCDN, and have not yet been deleted by the uCDN, or expired and removed by the dCDN (as described in Section 4.4). Trigger Status Resources belonging to a uCDN MUST NOT be visible to any other CDN. The dCDN could, for example, achieve this by offering different collection URLs to each uCDN and by filtering the response based on the uCDN with which the HTTP client is associated.

dCDN必须使uCDN的触发器状态资源集合可用于该uCDN。此集合包括为uCDN中的CI/T命令创建的所有触发器状态资源,这些资源已被dCDN接受,但尚未被uCDN删除,或已过期并已被dCDN删除(如第4.4节所述)。属于uCDN的触发器状态资源不能对任何其他CDN可见。例如,dCDN可以通过向每个uCDN提供不同的集合URL,并根据HTTP客户端关联的uCDN过滤响应来实现这一点。

To trigger activity in a dCDN or to cancel triggered activity, the uCDN POSTs a CI/T Command to the dCDN's collection of the uCDN's Trigger Status Resources.

要触发dCDN中的活动或取消触发的活动,uCDN将向dCDN的uCDN触发器状态资源集合发布CI/T命令。

In order to allow the uCDN to check the status of multiple jobs in a single request, the dCDN MAY also maintain collections representing filtered views of the collection of all Trigger Status Resources. These filtered collections are "optional-to-implement", but if they are implemented, the dCDN MUST include links to them in the collection of all Trigger Status Resources. The filtered collections are:

为了允许uCDN检查单个请求中多个作业的状态,dCDN还可以维护表示所有触发器状态资源集合的过滤视图的集合。这些经过筛选的集合是“可实现的可选集合”,但如果它们已实现,则dCDN必须在所有触发器状态资源的集合中包含指向它们的链接。筛选的集合包括:

o Pending - Trigger Status Resources for CI/T Trigger Commands that have been accepted but not yet acted upon.

o Pending—已接受但尚未执行的CI/T触发器命令的触发器状态资源。

o Active - Trigger Status Resources for CI/T Trigger Commands that are currently being processed in the dCDN.

o Active—当前正在dCDN中处理的CI/T触发器命令的触发器状态资源。

o Complete - Trigger Status Resources representing activity that completed successfully, and "processed" CI/T Trigger Commands for which no further status updates will be made by the dCDN.

o Complete—触发状态资源,表示已成功完成的活动,以及dCDN不会对其进行进一步状态更新的“已处理”CI/T触发命令。

o Failed - Trigger Status Resources representing CI/T Commands that failed or were canceled by the uCDN.

o Failed—触发状态资源,表示失败或被uCDN取消的CI/T命令。

4. CDNI Trigger Interface
4. CDNI触发接口

This section describes an interface to enable a uCDN to trigger activity in a dCDN.

本节介绍一个接口,用于使uCDN能够触发dCDN中的活动。

The CI/T interface builds on top of HTTP, so dCDNs may make use of any HTTP feature when implementing the CI/T interface. For example, a dCDN SHOULD make use of HTTP's caching mechanisms to indicate that a requested response/representation has not been modified, reducing the uCDN's processing needed to determine whether the status of triggered activity has changed.

CI/T接口构建在HTTP之上,因此dCDNs在实现CI/T接口时可以使用任何HTTP功能。例如,dCDN应该使用HTTP的缓存机制来指示请求的响应/表示尚未修改,从而减少确定触发活动的状态是否已更改所需的uCDN处理。

All dCDNs implementing CI/T MUST support the HTTP GET, HEAD, POST, and DELETE methods as defined in [RFC7231].

所有实现CI/T的dCDNs必须支持[RFC7231]中定义的HTTP GET、HEAD、POST和DELETE方法。

The only representation specified in this document is JSON [RFC7159]. It MUST be supported by the uCDN and by the dCDN.

本文档中指定的唯一表示形式是JSON[RFC7159]。它必须由uCDN和dCDN支持。

The URL of the dCDN's collection of all Trigger Status Resources needs to be either discovered by or configured in the uCDN. The mechanism for discovery of that URL is outside the scope of this document.

所有触发器状态资源的dCDN集合的URL需要由uCDN查找或在uCDN中配置。发现该URL的机制不在本文档的范围内。

CI/T Commands are POSTed to the dCDN's collection of all Trigger Status Resources. If a CI/T Trigger Command is accepted by the dCDN, the dCDN creates a new Trigger Status Resource and returns its URI to the uCDN in an HTTP 201 response. The triggered activity can then be monitored by the uCDN using that resource and the collections described in Section 3.

CI/T命令发布到dCDN的所有触发器状态资源集合。如果dCDN接受CI/T触发器命令,dCDN将创建一个新的触发器状态资源,并在HTTP 201响应中将其URI返回给uCDN。然后,uCDN可以使用该资源和第3节中描述的集合来监控触发的活动。

The URI of each Trigger Status Resource is returned to the uCDN when it is created, and URIs of all Trigger Status Resources are listed in the dCDN's collection of all Trigger Status Resources. This means all Trigger Status Resources can be discovered by the uCDN, so dCDNs are free to assign whatever structure they desire to the URIs for CI/T resources. Therefore, uCDNs MUST NOT make any assumptions regarding the structure of CI/T URIs or the mapping between CI/T objects and their associated URIs. URIs present in the examples in this document are purely illustrative and are not intended to impose a definitive structure on CI/T interface implementations.

每个触发器状态资源的URI在创建时返回给uCDN,所有触发器状态资源的URI都列在dCDN的所有触发器状态资源集合中。这意味着uCDN可以发现所有触发器状态资源,因此dcdn可以自由地为CI/T资源的uri分配所需的任何结构。因此,uCDNs不得对CI/T URI的结构或CI/T对象与其关联URI之间的映射做出任何假设。本文档示例中的URI纯粹是说明性的,并不打算在CI/T接口实现上强加一个明确的结构。

4.1. Creating Triggers
4.1. 创建触发器

To issue a CI/T Command, the uCDN makes an HTTP POST to the dCDN's collection of all of the uCDN's Trigger Status Resources. The request body of that POST is a CI/T Command, as described in Section 5.1.1.

要发出CI/T命令,uCDN将向dCDN的所有uCDN触发器状态资源集合发送HTTP POST。如第5.1.1节所述,该职位的请求主体是一个CI/T命令。

The dCDN validates the CI/T Command. If the command is malformed or the uCDN does not have sufficient access rights, the dCDN MUST either respond with an appropriate 4xx HTTP error code and not create a Trigger Status Resource or create a "failed" Trigger Status Resource containing an appropriate Error Description.

dCDN验证CI/T命令。如果命令格式不正确或uCDN没有足够的访问权限,dCDN必须使用适当的4xx HTTP错误代码响应,并且不创建触发器状态资源,或者创建包含适当错误描述的“失败”触发器状态资源。

When a CI/T Trigger Command is accepted, the uCDN MUST create a new Trigger Status Resource that will convey a specification of the CI/T Command and its current status. The HTTP response to the dCDN MUST have status code 201 and MUST convey the URI of the Trigger Status Resource in the Location header field [RFC7231]. The HTTP response SHOULD include the content of the newly created Trigger Status Resource. This is particularly important in cases where the CI/T Trigger Command has completed immediately.

接受CI/T触发器命令时,uCDN必须创建新的触发器状态资源,该资源将传递CI/T命令及其当前状态的规范。对dCDN的HTTP响应必须具有状态代码201,并且必须在位置标头字段[RFC7231]中传递触发器状态资源的URI。HTTP响应应该包括新创建的触发器状态资源的内容。在CI/T触发器命令立即完成的情况下,这一点尤为重要。

Once a Trigger Status Resource has been created, the dCDN MUST NOT reuse its URI, even after that Trigger Status Resource has been removed.

创建触发器状态资源后,dCDN不得重用其URI,即使在删除该触发器状态资源之后也是如此。

The dCDN SHOULD track and report on the progress of CI/T Trigger Commands using a Trigger Status Resource (Section 5.1.2). If the dCDN is not able to do that, it MUST indicate that it has accepted the request but will not be 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 Trigger Status Resources. 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 pre-positioning after an earlier delete of the same URLs is expected to have finished.

dCDN应使用触发器状态资源跟踪并报告CI/T触发器命令的进度(第5.1.2节)。如果dCDN不能做到这一点,它必须表明它已接受请求,但不会提供进一步的状态更新。为此,它将触发器状态资源的状态设置为“已处理”。在这种情况下,CI/T处理应与“完整”请求一样继续,因此必须将触发器状态资源添加到dCDN的完整触发器状态资源集合中。dCDN还应该使用触发器状态资源的“etime”属性为请求提供估计完成时间。这将允许uCDN在预期完成相同URL的早期删除后安排预定位。

If the dCDN is able to track the execution of CI/T Commands and a CI/T Command is queued by the dCDN for later action, the "status" property of the Trigger Status Resource MUST be "pending". Once processing has started, the status MUST be "active". Finally, once the CI/T Command is complete, the status MUST be set to "complete" or "failed".

如果dCDN能够跟踪CI/T命令的执行,并且CI/T命令由dCDN排队等待后续操作,则触发器状态资源的“status”属性必须为“pending”。一旦开始处理,状态必须为“活动”。最后,一旦CI/T命令完成,状态必须设置为“完成”或“失败”。

A CI/T Trigger Command may result in no activity in the dCDN if, for example, it is an "invalidate" or "purge" request for data the dCDN has not yet acquired, or a "preposition" request for data that it has already acquired and that is still valid. In this case, the status of the Trigger Status Resource MUST be "processed" or "complete", and the Trigger Status Resource MUST be added to the dCDN's collection of complete Trigger Status Resources.

例如,如果CI/T触发器命令是对dCDN尚未获取的数据的“无效”或“清除”请求,或者是对已获取且仍然有效的数据的“前置”请求,则该命令可能导致dCDN中没有活动。在这种情况下,触发器状态资源的状态必须为“已处理”或“已完成”,并且触发器状态资源必须添加到dCDN的完整触发器状态资源集合中。

Once created, Trigger Status Resources can be canceled or deleted by the uCDN, but not modified. The dCDN MUST reject PUT and POST requests from the uCDN to Trigger Status Resources by responding with an appropriate HTTP status code -- for example, 405 ("Method Not Allowed").

创建后,uCDN可以取消或删除触发器状态资源,但不能修改。dCDN必须拒绝来自uCDN的PUT和POST请求,以通过使用适当的HTTP状态代码(例如405(“方法不允许”)进行响应来触发状态资源。

4.2. Checking Status
4.2. 检查状态

The uCDN has two ways to check the progress of CI/T Commands it has issued to the dCDN, as described in Sections 4.2.1 and 4.2.2.

如第4.2.1节和第4.2.2节所述,uCDN有两种方法检查其向dCDN发出的CI/T命令的进度。

To allow the uCDN to check for changes in the status of a Trigger Status Resource or collection of Trigger Status Resources without refetching the whole resource or collection, the dCDN SHOULD include entity-tags (ETags) for the uCDN to use as cache validators, as defined in [RFC7232].

要允许uCDN检查触发器状态资源或触发器状态资源集合状态的更改,而无需重新蚀刻整个资源或集合,dCDN应包括实体标记(ETag),以便uCDN用作缓存验证程序,如[RFC7232]中所定义。

The dCDN SHOULD use the cache control headers for responses to GETs for Trigger Status Resources and Collections to indicate the frequency at which it recommends that the uCDN should poll for change.

dCDN应该使用缓存控制头来响应触发器状态资源和集合的GET,以指示建议uCDN轮询更改的频率。

4.2.1. Polling Trigger Status Resource Collections
4.2.1. 轮询触发器状态资源集合

The uCDN can fetch the collection of its Trigger Status Resources or filtered views of that collection.

uCDN可以获取其触发器状态资源的集合或该集合的筛选视图。

This makes it possible to poll the status of all CI/T Trigger Commands in a single request. If the dCDN moves a Trigger Status Resource from the active to the completed collection, the uCDN can fetch the result of that activity.

这使得在单个请求中轮询所有CI/T触发器命令的状态成为可能。如果dCDN将触发器状态资源从活动集合移动到已完成集合,则uCDN可以获取该活动的结果。

When polling in this way, the uCDN SHOULD use HTTP ETags to monitor for change, rather than repeatedly fetching the whole collection. An example of this is given in Section 6.2.4.

以这种方式进行轮询时,uCDN应该使用HTTP ETag来监视更改,而不是重复获取整个集合。第6.2.4节给出了一个例子。

4.2.2. Polling Trigger Status Resources
4.2.2. 轮询触发器状态资源

The uCDN has a URI provided by the dCDN for each Trigger Status Resource it has created. It may fetch that Trigger Status Resource at any time.

uCDN具有dCDN为其创建的每个触发器状态资源提供的URI。它可以随时获取该触发器状态资源。

This can be used to retrieve progress information and to fetch the result of the CI/T Command.

这可用于检索进度信息和获取CI/T命令的结果。

When polling in this way, the uCDN SHOULD use HTTP ETags to monitor for change, rather than repeatedly fetching the Trigger Status Resource.

以这种方式进行轮询时,uCDN应该使用HTTP ETag来监视更改,而不是重复获取触发器状态资源。

4.3. Canceling Triggers
4.3. 取消触发器

The uCDN can request cancellation of a CI/T Trigger Command by POSTing a CI/T Cancel Command to the collection of all Trigger Status Resources.

uCDN可以通过向所有触发器状态资源的集合发布CI/T Cancel命令来请求取消CI/T触发器命令。

The dCDN is required to accept and respond to the CI/T Cancel Command, but the actual cancellation of a CI/T Trigger Command is optional-to-implement.

dCDN需要接受并响应CI/T Cancel命令,但实际取消CI/T触发器命令是可选的。

The dCDN MUST respond to the CI/T Cancel Command appropriately -- for example, with HTTP status code 200 ("OK") if the cancellation has been processed and the CI/T Command is inactive, 202 ("Accepted") if the command has been accepted but the CI/T Command remains active, or 501 ("Not Implemented") if cancellation is not supported by the dCDN.

dCDN必须适当地响应CI/T Cancel命令——例如,如果已处理取消且CI/T命令处于非活动状态,则使用HTTP状态代码200(“确定”);如果已接受命令但CI/T命令保持活动状态,则使用202(“接受”);如果dCDN不支持取消,则使用501(“未实现”)。

If cancellation of a "pending" Trigger Status Resource is accepted by the dCDN, the dCDN SHOULD NOT start the processing of that activity. Issuing a CI/T Cancel Command for a "pending" Trigger Status Resource does not, however, guarantee that the corresponding activity will not be started, because the uCDN cannot control the timing of that activity. Processing could, for example, start after the POST is sent by the uCDN but before that request is processed by the dCDN.

如果dCDN接受取消“挂起”触发器状态资源,则dCDN不应启动该活动的处理。但是,为“挂起”触发器状态资源发出CI/T Cancel命令并不保证相应的活动不会启动,因为uCDN无法控制该活动的计时。例如,处理可以在uCDN发送POST之后,但在dCDN处理该请求之前开始。

If cancellation of an "active" or "processed" Trigger Status Resource is accepted by the dCDN, the dCDN SHOULD stop processing the CI/T Command. However, as with cancellation of a "pending" CI/T Command, the dCDN does not guarantee this.

如果dCDN接受取消“活动”或“已处理”触发器状态资源,则dCDN应停止处理CI/T命令。但是,与取消“挂起”CI/T命令一样,dCDN不能保证这一点。

If the CI/T Command cannot be stopped immediately, the status in the corresponding Trigger Status Resource MUST be set to "cancelling", and the Trigger Status Resource MUST remain in the collection of Trigger Status Resources for active CI/T Commands. If processing is stopped before normal completion, the status value in the Trigger

如果无法立即停止CI/T命令,则必须将相应触发器状态资源中的状态设置为“取消”,并且触发器状态资源必须保留在活动CI/T命令的触发器状态资源集合中。如果在正常完成之前停止处理,则触发器中的状态值

Status Resource MUST be set to "cancelled", and the Trigger Status Resource MUST be included in the collection of failed CI/T Trigger Commands.

状态资源必须设置为“已取消”,并且触发器状态资源必须包含在失败的CI/T触发器命令集合中。

Cancellation of a "complete" or "failed" Trigger Status Resource requires no processing in the dCDN. Its status MUST NOT be changed to "cancelled".

取消“完成”或“失败”触发器状态资源不需要在dCDN中进行处理。其状态不得更改为“已取消”。

4.4. Deleting Triggers
4.4. 删除触发器

The uCDN can delete Trigger Status Resources at any time, using the HTTP DELETE method. The effect is similar to cancellation, but no Trigger Status Resource remains afterwards.

uCDN可以使用HTTP delete方法随时删除触发器状态资源。其效果类似于取消,但之后不会保留触发器状态资源。

Once deleted, the references to a Trigger Status Resource MUST be removed from all Trigger Status Resource collections. Subsequent requests to GET the deleted Trigger Status Resource SHOULD be rejected by the dCDN with an HTTP error.

删除后,必须从所有触发器状态资源集合中删除对触发器状态资源的引用。dCDN应拒绝获取已删除触发器状态资源的后续请求,并显示HTTP错误。

If a "pending" Trigger Status Resource is deleted, the dCDN SHOULD NOT start the processing of that activity. Deleting a "pending" Trigger Status Resource does not, however, guarantee that it has not started, because the uCDN cannot control the timing of that activity. Processing may, for example, start after the DELETE is sent by the uCDN but before that request is processed by the dCDN.

如果删除了“挂起”触发器状态资源,则dCDN不应启动该活动的处理。但是,删除“挂起”触发器状态资源并不保证它尚未启动,因为uCDN无法控制该活动的计时。例如,处理可以在uCDN发送删除之后,但在dCDN处理该请求之前开始。

If an "active" or "processed" Trigger Status Resource is deleted, the dCDN SHOULD stop processing the CI/T Command. However, as with deletion of a "pending" Trigger Status Resource, the dCDN does not guarantee this.

如果删除了“活动”或“已处理”触发器状态资源,则dCDN应停止处理CI/T命令。但是,与删除“挂起”触发器状态资源一样,dCDN不能保证这一点。

Deletion of a "complete" or "failed" Trigger Status Resource requires no processing in the dCDN other than deletion of the Trigger Status Resource.

删除“完成”或“失败”触发器状态资源不需要在dCDN中进行处理,只需删除触发器状态资源。

4.5. Expiry of Trigger Status Resources
4.5. 触发器状态资源到期

The dCDN can choose to automatically delete Trigger Status Resources some time after they become "complete", "processed", "failed", or "cancelled". In this case, the dCDN will remove the Trigger Status Resource and respond to subsequent requests for it with an HTTP error.

dCDN可以选择在触发器状态资源变为“完成”、“已处理”、“失败”或“已取消”后一段时间自动删除这些资源。在这种情况下,dCDN将删除触发器状态资源,并用HTTP错误响应后续请求。

If the dCDN does remove Trigger Status Resources automatically, it MUST report the length of time after which it will do so, using a property of the collection of all Trigger Status Resources. It is

如果dCDN确实自动删除触发器状态资源,则它必须使用所有触发器状态资源集合的属性报告执行此操作的时间长度。它是

RECOMMENDED that Trigger Status Resources are not automatically deleted by the dCDN for at least 24 hours after they become "complete", "processed", "failed", or "cancelled".

建议在触发器状态资源变为“完成”、“已处理”、“失败”或“已取消”后至少24小时内,dCDN不会自动删除这些资源。

To ensure that it is able to get the status of its Trigger Status Resources for completed and failed CI/T Commands, it is RECOMMENDED that the uCDN polling interval is less than the time after which records for completed activity will be deleted.

为确保能够获取已完成和失败的CI/T命令的触发器状态资源的状态,建议uCDN轮询间隔小于删除已完成活动记录的时间。

4.6. Loop Detection and Prevention
4.6. 环路检测与预防

Given three CDNs, A, B, and C, if CDNs B and C delegate delivery of CDN A's content to each other, CDN A's CI/T Commands could be passed between CDNs B and C in a loop. More complex networks of CDNs could contain similar loops involving more hops.

给定三个CDN,即A、B和C,如果CDN B和C将CDN A的内容传递委托给彼此,则CDN A的CI/T命令可以在CDN B和C之间循环传递。更复杂的CDN网络可能包含涉及更多跳数的类似环路。

In order to prevent and detect such CI/T loops, each CDN uses a CDN Provider ID (PID) to uniquely identify itself. In every CI/T Command it originates or cascades, each CDN MUST append an array element containing its CDN PID to a JSON array under an entry named "cdn-path". When receiving CI/T Commands, a dCDN MUST check the cdn-path and reject any CI/T Command that already contains its own CDN PID in the cdn-path. Transit CDNs MUST check the cdn-path and not cascade the CI/T Command to dCDNs that are already listed in the cdn-path.

为了防止和检测这样的CI/T循环,每个CDN使用CDN提供者ID(PID)来唯一地标识自己。在它发起或级联的每个CI/T命令中,每个CDN都必须在名为“CDN path”的条目下将包含其CDN PID的数组元素附加到JSON数组中。接收CI/T命令时,dCDN必须检查cdn路径,并拒绝cdn路径中已经包含其自身cdn PID的任何CI/T命令。传输cdn必须检查cdn路径,不得将CI/T命令级联到cdn路径中已列出的DCDN。

The CDN PID consists of the two characters "AS" followed by the CDN provider's Autonomous System number [RFC1930], then a colon (":") and an additional qualifier that is used to guarantee uniqueness in case a particular AS has multiple independent CDNs deployed -- for example, "AS64496:0".

CDN PID由两个字符“AS”组成,后跟CDN提供商的自主系统号[RFC1930],然后是冒号(“:”)和附加限定符,用于在特定AS部署了多个独立CDN的情况下保证唯一性,例如“AS64496:0”。

If the CDN provider has multiple ASes, the same AS number SHOULD be used in all messages from that CDN provider, unless there are multiple distinct CDNs.

如果CDN提供程序有多个ASE,则来自该CDN提供程序的所有消息中应使用相同的AS编号,除非有多个不同的CDN。

If the CDNI Request Routing Redirection interface (RI) described in [RFC7975] is implemented by the dCDN, the CI/T interface and the RI SHOULD use the same CDN PID.

如果[RFC7975]中描述的CDNI请求路由重定向接口(RI)由dCDN实现,则CI/T接口和RI应使用相同的CDN PID。

4.7. Error Handling
4.7. 错误处理

A dCDN can signal rejection of a CI/T Command using HTTP status codes -- for example, 400 ("Bad Request") if the request is malformed, or 403 ("Forbidden") or 404 ("Not Found") if the uCDN does not have permission to issue CI/T Commands or it is trying to act on another CDN's data.

dCDN可以使用HTTP状态代码发出拒绝CI/T命令的信号——例如,如果请求格式不正确,则为400(“错误请求”),如果uCDN无权发出CI/T命令或试图对另一个CDN的数据执行操作,则为403(“禁止”)或404(“未找到”)。

If any part of the CI/T Trigger Command fails, the trigger SHOULD be reported as "failed" once its activity is complete or if no further errors will be reported. The "errors" property in the Trigger Status Resource will be used to enumerate which actions failed and the reasons for failure, and can be present while the Trigger Status Resource is still "pending" or "active", if the CI/T Trigger Command is still running for some URLs or patterns in the Trigger Specification.

如果CI/T触发器命令的任何部分失败,则一旦触发器的活动完成,或者如果不会报告进一步的错误,则应将其报告为“失败”。触发器状态资源中的“errors”属性将用于枚举哪些操作失败以及失败的原因,如果CI/T触发器命令仍在为触发器规范中的某些URL或模式运行,则当触发器状态资源仍处于“挂起”或“活动”状态时,该属性可以出现。

Once a request has been accepted, processing errors are reported in the Trigger Status Resource using a list of Error Descriptions. Each Error Description is used to report errors against one or more of the URLs or patterns in the Trigger Specification.

接受请求后,将使用错误描述列表在触发器状态资源中报告处理错误。每个错误描述用于针对触发器规范中的一个或多个URL或模式报告错误。

If a Surrogate affected by a CI/T Trigger Command is offline in the dCDN or the dCDN is unable to pass a CI/T Command on to any of its cascaded dCDNs:

如果受CI/T触发器命令影响的代理在dCDN中处于脱机状态,或者dCDN无法将CI/T命令传递给其任何级联dCDN:

o If the CI/T Command is abandoned by the dCDN, the dCDN SHOULD report an error.

o 如果dCDN放弃CI/T命令,则dCDN应报告错误。

o A CI/T "invalidate" command may be reported as "complete" when Surrogates that may have the data are offline. In this case, Surrogates MUST NOT use the affected data without first revalidating it when they are back online.

o 当可能具有数据的代理脱机时,CI/T“invalidate”命令可能会报告为“complete”。在这种情况下,代理必须在重新联机时首先重新验证受影响的数据,才能使用受影响的数据。

o CI/T "preposition" and "purge" commands can be reported as "processed" if affected caches are offline and the activity will complete when they return to service.

o 如果受影响的缓存处于脱机状态,CI/T“preposition”和“purge”命令可以报告为“processed”,并且活动将在它们返回服务时完成。

o Otherwise, the dCDN SHOULD keep the Trigger Status Resource in state "pending" or "active" until either the CI/T Command is acted upon or the uCDN chooses to cancel it.

o 否则,dCDN应将触发器状态资源保持在“挂起”或“活动”状态,直到CI/T命令被执行或uCDN选择取消它。

4.8. Content URLs
4.8. 内容URL

If content URLs are transformed by an intermediate CDN in a cascade, that intermediate CDN MUST similarly transform URLs in CI/T Commands it passes to its dCDN.

如果内容URL由级联中的中间CDN转换,则该中间CDN必须类似地转换传递给其dCDN的CI/T命令中的URL。

When processing Trigger Specifications, CDNs MUST ignore the URL scheme (HTTP or HTTPS) in comparing URLs. For example, for a CI/T "invalidate" or "purge" command, content MUST be invalidated or purged regardless of the protocol clients used to request it.

在处理触发器规范时,CDN在比较URL时必须忽略URL方案(HTTP或HTTPS)。例如,对于CI/T“invalidate”或“purge”命令,无论用于请求内容的协议客户端如何,内容都必须无效或清除。

5. CI/T Object Properties and Encoding
5. CI/T对象属性和编码

The CI/T Commands, Trigger Status Resources, and Trigger Collections, as well as their properties, are encoded using JSON, as defined in Sections 5.1.1, 5.1.2, and 5.1.3. They MUST use the MIME media type "application/cdni", with parameter "ptype" values as defined below and in Section 7.1.

CI/T命令、触发器状态资源和触发器集合及其属性使用JSON编码,如第5.1.1、5.1.2和5.1.3节所定义。他们必须使用MIME媒体类型“application/cdni”,参数“ptype”值定义见下文和第7.1节。

Names in JSON are case sensitive. The names and literal values specified in the present document MUST always use lowercase.

JSON中的名称区分大小写。本文档中指定的名称和文字值必须始终使用小写。

JSON types, including "object", "array", "number", and "string", are defined in [RFC7159].

JSON类型,包括“对象”、“数组”、“数字”和“字符串”,在[RFC7159]中定义。

Unrecognized name/value pairs in JSON objects SHOULD NOT be treated as an error by either the uCDN or dCDN. They SHOULD be ignored during processing and passed on by the dCDN to any further dCDNs in a cascade.

uCDN或dCDN不应将JSON对象中无法识别的名称/值对视为错误。在处理过程中应忽略它们,并由dCDN传递给级联中的任何其他dCDN。

5.1. CI/T Objects
5.1. CI/T对象

The top-level objects defined by the CI/T interface are described in this section.

本节介绍了CI/T接口定义的顶级对象。

The encoding of values used by these objects is described in Section 5.2.

第5.2节描述了这些对象使用的值的编码。

5.1.1. CI/T Commands
5.1.1. CI/T命令

CI/T Commands MUST use a MIME media type of "application/cdni; ptype=ci-trigger-command".

CI/T命令必须使用MIME媒体类型“application/cdni;ptype=CI触发器命令”。

A CI/T Command is encoded as a JSON object containing the following name/value pairs.

CI/T命令被编码为包含以下名称/值对的JSON对象。

Name: trigger

名称:触发器

Description: A specification of the trigger type and a set of data to act upon.

描述:触发器类型的规范和要执行操作的一组数据。

Value: A Trigger Specification, as defined in Section 5.2.1.

值:第5.2.1节中定义的触发器规范。

Mandatory: No, but exactly one of "trigger" or "cancel" MUST be present in a CI/T Command.

必填项:否,但CI/T命令中必须正好存在一个“触发器”或“取消”。

Name: cancel

姓名:取消

Description: The URLs of Trigger Status Resources for CI/T Trigger Commands that the uCDN wants to cancel.

描述:uCDN要取消的CI/T触发器命令的触发器状态资源的URL。

Value: A non-empty JSON array of URLs represented as JSON strings.

Value:表示为JSON字符串的URL的非空JSON数组。

Mandatory: No, but exactly one of "trigger" or "cancel" MUST be present in a CI/T Command.

必填项:否,但CI/T命令中必须正好存在一个“触发器”或“取消”。

Name: cdn-path

名称:cdn路径

Description: The CDN PIDs of CDNs that have already issued the CI/T Command to their dCDNs.

描述:已向其DCDN发出CI/T命令的CDN的CDN PID。

Value: A non-empty JSON array of JSON strings, where each string is a CDN PID as defined in Section 4.6.

Value:JSON字符串的非空JSON数组,其中每个字符串都是第4.6节中定义的CDN PID。

Mandatory: Yes.

强制性:是的。

5.1.2. Trigger Status Resources
5.1.2. 触发状态资源

Trigger Status Resources MUST use a MIME media type of "application/cdni; ptype=ci-trigger-status".

触发器状态资源必须使用MIME媒体类型“application/cdni;ptype=ci触发器状态”。

A Trigger Status Resource is encoded as a JSON object containing the following name/value pairs.

触发器状态资源编码为包含以下名称/值对的JSON对象。

Name: trigger

名称:触发器

Description: The Trigger Specification POSTed in the body of the CI/T Command. Note that this need not be a byte-for-byte copy. For example, in the JSON representation the dCDN may re-serialize the information differently.

描述:发布在CI/T命令体中的触发器规范。请注意,这不需要是逐字节复制。例如,在JSON表示中,dCDN可能以不同的方式重新序列化信息。

Value: A Trigger Specification, as defined in Section 5.2.1.

值:第5.2.1节中定义的触发器规范。

Mandatory: Yes.

强制性:是的。

Name: ctime

姓名:ctime

Description: Time at which the CI/T Command was received by the dCDN. Time is determined by the dCDN; there is no requirement to synchronize clocks between interconnected CDNs.

描述:dCDN接收CI/T命令的时间。时间由dCDN决定;互连CDN之间不需要同步时钟。

Value: Absolute Time, as defined in Section 5.2.5.

值:第5.2.5节中定义的绝对时间。

Mandatory: Yes.

强制性:是的。

Name: mtime

姓名:mtime

Description: Time at which the Trigger Status Resource was last modified. Time is determined by the dCDN; there is no requirement to synchronize clocks between interconnected CDNs.

描述:上次修改触发器状态资源的时间。时间由dCDN决定;互连CDN之间不需要同步时钟。

Value: Absolute Time, as defined in Section 5.2.5.

值:第5.2.5节中定义的绝对时间。

Mandatory: Yes.

强制性:是的。

Name: etime

姓名:etime

Description: Estimate of the time at which the dCDN expects to complete the activity. Time is determined by the dCDN; there is no requirement to synchronize clocks between interconnected CDNs.

描述:dCDN预计完成活动的时间估计。时间由dCDN决定;互连CDN之间不需要同步时钟。

Value: Absolute Time, as defined in Section 5.2.5.

值:第5.2.5节中定义的绝对时间。

Mandatory: No.

强制性:否。

Name: status

姓名:身份

Description: Current status of the triggered activity.

描述:已触发活动的当前状态。

Value: Trigger Status, as defined in Section 5.2.3.

值:触发状态,如第5.2.3节所定义。

Mandatory: Yes.

强制性:是的。

Name: errors

名称:错误

Description: Descriptions of errors that have occurred while processing a Trigger Command.

描述:处理触发器命令时发生的错误的描述。

Value: An array of Error Descriptions, as defined in Section 5.2.6. An empty array is allowed and is equivalent to omitting "errors" from the object.

值:第5.2.6节中定义的错误描述数组。允许使用空数组,这相当于省略对象中的“错误”。

Mandatory: No.

强制性:否。

5.1.3. Trigger Collections
5.1.3. 触发集合

Trigger Collections MUST use a MIME media type of "application/cdni; ptype=ci-trigger-collection".

触发器集合必须使用MIME媒体类型“application/cdni;ptype=ci触发器集合”。

A Trigger Collection is encoded as a JSON object containing the following name/value pairs.

触发器集合编码为包含以下名称/值对的JSON对象。

Name: triggers

名称:触发器

Description: Links to Trigger Status Resources in the collection.

描述:指向集合中触发器状态资源的链接。

Value: A JSON array of zero or more URLs, represented as JSON strings.

Value:由零个或多个URL组成的JSON数组,表示为JSON字符串。

Mandatory: Yes.

强制性:是的。

Name: staleresourcetime

姓名:staleresourcetime

Description: The length of time for which the dCDN guarantees to keep a completed Trigger Status Resource. After this time, the dCDN SHOULD delete the Trigger Status Resource and all references to it from collections.

描述:dCDN保证保留已完成触发器状态资源的时间长度。在此之后,dCDN应该从集合中删除触发器状态资源和对它的所有引用。

Value: A JSON number, which must be a positive integer, representing time in seconds.

Value:一个JSON数字,必须是正整数,以秒为单位表示时间。

Mandatory: Yes, in the collection of all Trigger Status Resources if the dCDN deletes stale entries. If the property is present in the filtered collections, it MUST have the same value as in the collection of all Trigger Status Resources.

必填项:是,如果dCDN删除过时的条目,则在所有触发器状态资源的集合中。如果筛选的集合中存在该属性,则该属性的值必须与所有触发器状态资源集合中的值相同。

Names: coll-all, coll-pending, coll-active, coll-complete, coll-failed

名称:coll all、coll pending、coll active、coll complete、coll failed

Description: Link to a Trigger Collection.

描述:链接到触发器集合。

Value: A URL represented as a JSON string.

Value:表示为JSON字符串的URL。

Mandatory: Links to all of the filtered collections are mandatory in the collection of all Trigger Status Resources, if the dCDN implements the filtered collections. Otherwise, optional.

强制:如果dCDN实现了已筛选的集合,则指向所有已筛选集合的链接在所有触发器状态资源的集合中都是强制的。否则,可选。

Name: cdn-id

名称:cdn id

Description: The CDN PID of the dCDN.

描述:dCDN的CDN PID。

Value: A JSON string, the dCDN's CDN PID, as defined in Section 4.6.

值:一个JSON字符串,dCDN的CDN PID,如第4.6节所定义。

Mandatory: Only in the collection of all Trigger Status Resources, if the dCDN implements the filtered collections. Optional in the filtered collections (the uCDN can always find the dCDN's cdn-id in the collection of all Trigger Status Resources, but the dCDN can choose to repeat that information in its implementation of filtered collections).

必需:仅在所有触发器状态资源的集合中,如果dCDN实现筛选的集合。在筛选的集合中可选(uCDN始终可以在所有触发器状态资源的集合中找到dCDN的cdn id,但dCDN可以选择在其筛选的集合的实现中重复该信息)。

5.2. Properties of CI/T Objects
5.2. CI/T对象的属性

This section defines the values that can appear in the top-level objects described in Section 5.1, and their encodings.

本节定义了第5.1节中描述的顶级对象中可能出现的值及其编码。

5.2.1. Trigger Specification
5.2.1. 触发器规格

A Trigger Collection is encoded as a JSON object containing the following name/value pairs.

触发器集合编码为包含以下名称/值对的JSON对象。

An unrecognized name/value pair in the Trigger Specification object contained in a CI/T Command SHOULD be preserved in the Trigger Specification of any Trigger Status Resource it creates.

CI/T命令中包含的触发器规范对象中的无法识别的名称/值对应保留在其创建的任何触发器状态资源的触发器规范中。

Name: type

名称:类型

Description: Defines the type of the CI/T Trigger Command.

描述:定义CI/T触发器命令的类型。

Value: Trigger Type, as defined in Section 5.2.2.

值:第5.2.2节中定义的触发器类型。

Mandatory: Yes.

强制性:是的。

Name: metadata.urls

名称:metadata.url

Description: The uCDN URLs of the metadata the CI/T Trigger Command applies to.

描述:CI/T触发器命令应用于的元数据的uCDN URL。

Value: A JSON array of URLs represented as JSON strings.

Value:表示为JSON字符串的URL的JSON数组。

Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present and non-empty.

必填项:否,但“metadata.*”或“content.*”中至少有一个必须存在且非空。

Name: content.urls

名称:content.url

Description: URLs of content the CI/T Trigger Command applies to. See Section 4.8.

描述:CI/T触发器命令应用于的内容的URL。见第4.8节。

Value: A JSON array of URLs represented as JSON strings.

Value:表示为JSON字符串的URL的JSON数组。

Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present and non-empty.

必填项:否,但“metadata.*”或“content.*”中至少有一个必须存在且非空。

Name: content.ccid

名称:content.ccid

Description: The Content Collection IDentifier of content the trigger applies to. The "ccid" is a grouping of content, as defined by [RFC8006].

描述:触发器应用于的内容的内容集合标识符。“ccid”是由[RFC8006]定义的内容分组。

Value: A JSON array of strings, where each string is a Content Collection IDentifier.

Value:字符串的JSON数组,其中每个字符串都是内容集合标识符。

Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present and non-empty.

必填项:否,但“metadata.*”或“content.*”中至少有一个必须存在且非空。

Name: metadata.patterns

名称:metadata.patterns

Description: The metadata the trigger applies to.

描述:触发器应用于的元数据。

Value: A JSON array of PatternMatch objects, as defined in Section 5.2.4.

值:PatternMatch对象的JSON数组,如第5.2.4节所定义。

Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present and non-empty, and metadata.patterns MUST NOT be present if the Trigger Type is "preposition".

必填项:否,但“metadata.*”或“content.*”中至少有一个必须存在且非空,如果触发器类型为“preposition”,则metadata.patterns不得存在。

Name: content.patterns

名称:content.patterns

Description: The content data the trigger applies to.

描述:触发器应用于的内容数据。

Value: A JSON array of PatternMatch objects, as defined in Section 5.2.4.

值:PatternMatch对象的JSON数组,如第5.2.4节所定义。

Mandatory: No, but at least one of "metadata.*" or "content.*" MUST be present and non-empty, and content.patterns MUST NOT be present if the Trigger Type is "preposition".

必填项:否,但“metadata.*”或“content.*”中至少有一个必须存在且非空,如果触发器类型为“preposition”,则content.patterns不得存在。

5.2.2. Trigger Type
5.2.2. 触发类型

Trigger Type is used in a Trigger Specification to describe trigger action.

触发器类型在触发器规范中用于描述触发器操作。

All trigger types MUST be registered in the IANA "CDNI CI/T Trigger Types" registry (see Section 7.2).

所有触发器类型必须在IANA“CDNI CI/T触发器类型”注册表中注册(见第7.2节)。

A dCDN receiving a request containing a trigger type it does not recognize or does not support MUST reject the request by creating a Trigger Status Resource with a status of "failed" and the "errors" array containing an Error Description with error "eunsupported".

接收到包含其不识别或不支持的触发器类型的请求的dCDN必须通过创建状态为“failed”的触发器状态资源和包含错误描述的“errors”数组(错误描述为“eunsupported”)来拒绝该请求。

The following trigger types are defined by this document:

本文档定义了以下触发器类型:

   +-------------+-----------------------------------------------------+
   | JSON String | Description                                         |
   +-------------+-----------------------------------------------------+
   | preposition | A request for the dCDN to acquire metadata or       |
   |             | content.                                            |
   | invalidate  | A request for the dCDN to invalidate metadata or    |
   |             | content.  After servicing this request, the dCDN    |
   |             | will not use the specified data without first       |
   |             | revalidating it using, for example, an              |
   |             | "If-None-Match" HTTP request.  The dCDN need not    |
   |             | erase the associated data.                          |
   | purge       | A request for the dCDN to erase metadata or         |
   |             | content.  After servicing the request, the          |
   |             | specified data MUST NOT be held on the dCDN (the    |
   |             | dCDN should reacquire the metadata or content from  |
   |             | the uCDN if it needs it).                           |
   +-------------+-----------------------------------------------------+
        
   +-------------+-----------------------------------------------------+
   | JSON String | Description                                         |
   +-------------+-----------------------------------------------------+
   | preposition | A request for the dCDN to acquire metadata or       |
   |             | content.                                            |
   | invalidate  | A request for the dCDN to invalidate metadata or    |
   |             | content.  After servicing this request, the dCDN    |
   |             | will not use the specified data without first       |
   |             | revalidating it using, for example, an              |
   |             | "If-None-Match" HTTP request.  The dCDN need not    |
   |             | erase the associated data.                          |
   | purge       | A request for the dCDN to erase metadata or         |
   |             | content.  After servicing the request, the          |
   |             | specified data MUST NOT be held on the dCDN (the    |
   |             | dCDN should reacquire the metadata or content from  |
   |             | the uCDN if it needs it).                           |
   +-------------+-----------------------------------------------------+
        
5.2.3. Trigger Status
5.2.3. 触发状态

Trigger Status describes the current status of the triggered activity. It MUST be one of the JSON strings in the following table:

触发器状态描述已触发活动的当前状态。它必须是下表中的JSON字符串之一:

   +-----------+-------------------------------------------------------+
   | JSON      | Description                                           |
   | String    |                                                       |
   +-----------+-------------------------------------------------------+
   | pending   | The CI/T Trigger Command has not yet been acted upon. |
   | active    | The CI/T Trigger Command is currently being acted     |
   |           | upon.                                                 |
   | complete  | The CI/T Trigger Command completed successfully.      |
   | processed | The CI/T Trigger Command has been accepted, and no    |
   |           | further status update will be made (can be used in    |
   |           | cases where completion cannot be confirmed).          |
   | failed    | The CI/T Trigger Command could not be completed.      |
   | canceling | Processing of the CI/T Trigger Command is still in    |
   |           | progress, but the CI/T Trigger Command has been       |
   |           | canceled by the uCDN.                                 |
   | canceled  | The CI/T Trigger Command was canceled by the uCDN.    |
   +-----------+-------------------------------------------------------+
        
   +-----------+-------------------------------------------------------+
   | JSON      | Description                                           |
   | String    |                                                       |
   +-----------+-------------------------------------------------------+
   | pending   | The CI/T Trigger Command has not yet been acted upon. |
   | active    | The CI/T Trigger Command is currently being acted     |
   |           | upon.                                                 |
   | complete  | The CI/T Trigger Command completed successfully.      |
   | processed | The CI/T Trigger Command has been accepted, and no    |
   |           | further status update will be made (can be used in    |
   |           | cases where completion cannot be confirmed).          |
   | failed    | The CI/T Trigger Command could not be completed.      |
   | canceling | Processing of the CI/T Trigger Command is still in    |
   |           | progress, but the CI/T Trigger Command has been       |
   |           | canceled by the uCDN.                                 |
   | canceled  | The CI/T Trigger Command was canceled by the uCDN.    |
   +-----------+-------------------------------------------------------+
        
5.2.4. PatternMatch
5.2.4. 模式匹配

A PatternMatch consists of a string pattern to match against a URI, and flags describing the type of match.

PatternMatch由要与URI匹配的字符串模式和描述匹配类型的标志组成。

It is encoded as a JSON object with the following name/value pairs:

它被编码为具有以下名称/值对的JSON对象:

Name: pattern

名称:图案

Description: A pattern for URI matching.

描述:URI匹配的模式。

Value: A JSON string representing the pattern. The pattern can contain the wildcards * and ?, where * matches any sequence of [RFC3986] pchar or "/" characters (including the empty string) and ? matches exactly one [RFC3986] pchar character. The three literals $, * and ? MUST be escaped as $$, $* and $? (where $ is the designated escape character). All other characters are treated as literals.

Value:表示模式的JSON字符串。模式可以包含通配符*和?,其中*匹配[RFC3986]pchar或“/”字符的任何序列(包括空字符串)和?完全匹配一个[RFC3986]pchar字符。三个字面值$、*和?必须转义为$$、$*和$?(其中$是指定的转义字符)。所有其他字符都被视为文字。

Mandatory: Yes.

强制性:是的。

Name: case-sensitive

名称:区分大小写

Description: Flag indicating whether or not case-sensitive matching should be used.

描述:指示是否应使用区分大小写的匹配的标志。

Value: One of the JSON values "true" (the matching is case sensitive) or "false" (the matching is case insensitive).

Value:JSON值“true”(匹配区分大小写)或“false”(匹配不区分大小写)之一。

Mandatory: No; default is case-insensitive match.

强制性:否;默认值为不区分大小写的匹配。

Name: match-query-string

名称:匹配查询字符串

Description: Flag indicating whether to include the query part of the URI when comparing against the pattern.

Description:指示在与模式进行比较时是否包括URI的查询部分的标志。

Value: One of the JSON values "true" (the full URI, including the query part, should be compared against the given pattern) or "false" (the query part of the URI should be dropped before comparison with the given pattern).

Value:JSON值之一“true”(完整URI,包括查询部分,应与给定模式进行比较)或“false”(URI的查询部分应在与给定模式进行比较之前删除)。

Mandatory: No; default is "false". The query part of the URI should be dropped before comparison with the given pattern.

强制性:否;默认值为“false”。在与给定模式进行比较之前,应该删除URI的查询部分。

Example of case-sensitive prefix match against "https://www.example.com/trailers/":

与“”匹配的区分大小写前缀示例https://www.example.com/trailers/":

   {
       "pattern": "https://www.example.com/trailers/*",
       "case-sensitive": true
   }
        
   {
       "pattern": "https://www.example.com/trailers/*",
       "case-sensitive": true
   }
        
5.2.5. Absolute Time
5.2.5. 绝对时间

A JSON number, seconds since the UNIX epoch (00:00:00 UTC on 1 January 1970).

一个JSON数字,自UNIX纪元(1970年1月1日00:00:00 UTC)起的秒数。

5.2.6. Error Description
5.2.6. 错误描述

An Error Description is used to report the failure of a CI/T Command or failure in the activity it triggered. It is encoded as a JSON object with the following name/value pairs:

错误描述用于报告CI/T命令失败或其触发的活动失败。它被编码为具有以下名称/值对的JSON对象:

Name: error

名称:错误

Value: Error Code, as defined in Section 5.2.7.

值:第5.2.7节中定义的错误代码。

Mandatory: Yes.

强制性:是的。

Names: metadata.urls, content.urls, metadata.patterns, content.patterns

名称:metadata.url、content.url、metadata.patterns、content.patterns

Description: Metadata and content references copied from the Trigger Specification. Only those URLs and patterns to which the error applies are included in each property, but those URLs and patterns MUST be exactly as they appear in the request; the dCDN MUST NOT generalize the URLs. (For example, if the uCDN requests pre-positioning of URLs "https://content.example.com/a" and "https://content.example.com/b", the dCDN must not generalize its error report to the pattern "https://content.example.com/*".)

描述:从触发器规范复制的元数据和内容引用。每个属性中只包含错误适用的URL和模式,但这些URL和模式必须与请求中显示的完全相同;dCDN不能泛化URL。(例如,如果uCDN请求URL的预定位”https://content.example.com/a“和”https://content.example.com/b,dCDN不能将其错误报告泛化为模式https://content.example.com/*".)

Value: A JSON array of JSON strings, where each string is copied from a "content.*" or "metadata.*" value in the corresponding Trigger Specification.

Value:JSON字符串的JSON数组,其中每个字符串从相应触发器规范中的“content.*”或“metadata.*”值复制而来。

Mandatory: At least one of these name/value pairs is mandatory in each Error Description object.

必需:在每个错误描述对象中,至少有一个名称/值对是必需的。

Name: description

姓名:description

Description: A human-readable description of the error.

描述:错误的可读描述。

Value: A JSON string, the human-readable description.

Value:一个JSON字符串,人类可读的描述。

Mandatory: No.

强制性:否。

5.2.7. Error Code
5.2.7. 错误代码

This type is used by the dCDN to report failures in trigger processing. All Error Codes MUST be registered in the IANA "CDNI CI/T Error Codes" registry (see Section 7.3). Unknown Error Codes MUST be treated as fatal errors, and the request MUST NOT be automatically retried without modification.

dCDN使用此类型报告触发器处理中的失败。所有错误代码必须在IANA“CDNI CI/T错误代码”注册表中注册(见第7.3节)。未知错误代码必须视为致命错误,未经修改不得自动重试请求。

The following Error Codes are defined by this document and MUST be supported by an implementation of the CI/T interface.

以下错误代码由本文档定义,必须由CI/T接口的实现支持。

   +--------------+----------------------------------------------------+
   | Error Code   | Description                                        |
   +--------------+----------------------------------------------------+
   | emeta        | The dCDN was unable to acquire metadata required   |
   |              | to fulfill the request.                            |
   | econtent     | The dCDN was unable to acquire content (CI/T       |
   |              | "preposition" commands only).                      |
   | eperm        | The uCDN does not have permission to issue the     |
   |              | CI/T Command (for example, the data is owned by    |
   |              | another CDN).                                      |
   | ereject      | The dCDN is not willing to fulfill the CI/T        |
   |              | Command (for example, a "preposition" request for  |
   |              | content at a time when the dCDN would not accept   |
   |              | Request Routing requests from the uCDN).           |
   | ecdn         | An internal error in the dCDN or one of its dCDNs. |
   | ecanceled    | The uCDN canceled the request.                     |
   | eunsupported | The Trigger Specification contained a "type" that  |
   |              | is not supported by the dCDN.  No action was taken |
   |              | by the dCDN other than to create a Trigger Status  |
   |              | Resource in state "failed".                        |
   +--------------+----------------------------------------------------+
        
   +--------------+----------------------------------------------------+
   | Error Code   | Description                                        |
   +--------------+----------------------------------------------------+
   | emeta        | The dCDN was unable to acquire metadata required   |
   |              | to fulfill the request.                            |
   | econtent     | The dCDN was unable to acquire content (CI/T       |
   |              | "preposition" commands only).                      |
   | eperm        | The uCDN does not have permission to issue the     |
   |              | CI/T Command (for example, the data is owned by    |
   |              | another CDN).                                      |
   | ereject      | The dCDN is not willing to fulfill the CI/T        |
   |              | Command (for example, a "preposition" request for  |
   |              | content at a time when the dCDN would not accept   |
   |              | Request Routing requests from the uCDN).           |
   | ecdn         | An internal error in the dCDN or one of its dCDNs. |
   | ecanceled    | The uCDN canceled the request.                     |
   | eunsupported | The Trigger Specification contained a "type" that  |
   |              | is not supported by the dCDN.  No action was taken |
   |              | by the dCDN other than to create a Trigger Status  |
   |              | Resource in state "failed".                        |
   +--------------+----------------------------------------------------+
        
6. Examples
6. 例子

The following subsections provide examples of different CI/T objects encoded as JSON.

以下小节提供了编码为JSON的不同CI/T对象的示例。

Discovery of the CI/T interface is out of scope for this document. In an implementation, all CI/T URLs are under the control of the dCDN. The uCDN MUST NOT attempt to ascribe any meaning to individual elements of the path.

CI/T接口的发现超出了本文档的范围。在一个实现中,所有CI/T URL都在dCDN的控制下。uCDN不得试图将任何含义赋予路径的各个元素。

In examples in this section, the URL "https://dcdn.example.com/ triggers" is used as the location of the collection of all Trigger Status Resources, and the CDN PID of the uCDN is "AS64496:1".

在本节的示例中,URL“https://dcdn.example.com/ 触发器”用作所有触发器状态资源集合的位置,uCDN的CDN PID为“AS64496:1”。

6.1. Creating Triggers
6.1. 创建触发器

Examples of the uCDN triggering activity in the dCDN:

dCDN中uCDN触发活动的示例:

6.1.1. Preposition
6.1.1. 介词

Below is an example of a CI/T "preposition" command -- a POST to the collection of all Trigger Status Resources.

下面是一个CI/T“preposition”命令的示例——指向所有触发器状态资源集合的POST。

Note that "metadata.patterns" and "content.patterns" are not allowed in a pre-position Trigger Specification.

请注意,前置触发器规范中不允许使用“metadata.patterns”和“content.patterns”。

REQUEST:

请求:

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command
     Content-Length: 352
        
     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command
     Content-Length: 352
        
     {
       "trigger": {
         "type": "preposition",
        
     {
       "trigger": {
         "type": "preposition",
        
         "metadata.urls": [ "https://metadata.example.com/a/b/c" ],
         "content.urls": [
             "https://www.example.com/a/b/c/1",
             "https://www.example.com/a/b/c/2",
             "https://www.example.com/a/b/c/3",
             "https://www.example.com/a/b/c/4"
           ]
       },
       "cdn-path": [ "AS64496:1" ]
     }
        
         "metadata.urls": [ "https://metadata.example.com/a/b/c" ],
         "content.urls": [
             "https://www.example.com/a/b/c/1",
             "https://www.example.com/a/b/c/2",
             "https://www.example.com/a/b/c/3",
             "https://www.example.com/a/b/c/4"
           ]
       },
       "cdn-path": [ "AS64496:1" ]
     }
        

RESPONSE:

答复:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status
     Location: https://dcdn.example.com/triggers/0
     Server: example-server/0.1
        
     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status
     Location: https://dcdn.example.com/triggers/0
     Server: example-server/0.1
        
     {
         "ctime": 1462351690,
         "etime": 1462351698,
         "mtime": 1462351690,
         "status": "pending",
         "trigger": {
             "content.urls": [
                 "https://www.example.com/a/b/c/1",
                 "https://www.example.com/a/b/c/2",
                 "https://www.example.com/a/b/c/3",
                 "https://www.example.com/a/b/c/4"
             ],
             "metadata.urls": [
                 "https://metadata.example.com/a/b/c"
             ],
             "type": "preposition"
         }
     }
        
     {
         "ctime": 1462351690,
         "etime": 1462351698,
         "mtime": 1462351690,
         "status": "pending",
         "trigger": {
             "content.urls": [
                 "https://www.example.com/a/b/c/1",
                 "https://www.example.com/a/b/c/2",
                 "https://www.example.com/a/b/c/3",
                 "https://www.example.com/a/b/c/4"
             ],
             "metadata.urls": [
                 "https://metadata.example.com/a/b/c"
             ],
             "type": "preposition"
         }
     }
        
6.1.2. Invalidate
6.1.2. 使无效

Below is an example of a CI/T "invalidate" command -- another POST to the collection of all Trigger Status Resources. This instructs the dCDN to revalidate the content at "https://www.example.com/a/ index.html", as well as any metadata and content whose URLs are prefixed by "https://metadata.example.com/a/b/" using case-insensitive matching, and "https://www.example.com/a/b/" using case-sensitive matching, respectively.

下面是一个CI/T“invalidate”命令的示例,它是指向所有触发器状态资源集合的另一个POST。这将指示dCDN在“”处重新验证内容https://www.example.com/a/ html”,以及URL前缀为“”的任何元数据和内容https://metadata.example.com/a/b/使用不区分大小写的匹配,以及https://www.example.com/a/b/“分别使用区分大小写的匹配。

REQUEST:

请求:

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command
     Content-Length: 387
        
     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command
     Content-Length: 387
        
     {
       "trigger": {
         "type": "invalidate",
        
     {
       "trigger": {
         "type": "invalidate",
        
         "metadata.patterns": [
             { "pattern": "https://metadata.example.com/a/b/*" }
           ],
        
         "metadata.patterns": [
             { "pattern": "https://metadata.example.com/a/b/*" }
           ],
        
         "content.urls": [ "https://www.example.com/a/index.html" ],
         "content.patterns": [
             { "pattern": "https://www.example.com/a/b/*",
               "case-sensitive": true
             }
           ]
       },
       "cdn-path": [ "AS64496:1" ]
     }
        
         "content.urls": [ "https://www.example.com/a/index.html" ],
         "content.patterns": [
             { "pattern": "https://www.example.com/a/b/*",
               "case-sensitive": true
             }
           ]
       },
       "cdn-path": [ "AS64496:1" ]
     }
        

RESPONSE:

答复:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Length: 545
     Content-Type: application/cdni; ptype=ci-trigger-status
     Location: https://dcdn.example.com/triggers/1
     Server: example-server/0.1
        
     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Length: 545
     Content-Type: application/cdni; ptype=ci-trigger-status
     Location: https://dcdn.example.com/triggers/1
     Server: example-server/0.1
        
     {
         "ctime": 1462351691,
         "etime": 1462351699,
         "mtime": 1462351691,
         "status": "pending",
         "trigger": {
             "content.patterns": [
                 {
                     "case-sensitive": true,
                     "pattern": "https://www.example.com/a/b/*"
                 }
             ],
             "content.urls": [
                 "https://www.example.com/a/index.html"
             ],
             "metadata.patterns": [
                 {
                     "pattern": "https://metadata.example.com/a/b/*"
                 }
             ],
             "type": "invalidate"
         }
     }
        
     {
         "ctime": 1462351691,
         "etime": 1462351699,
         "mtime": 1462351691,
         "status": "pending",
         "trigger": {
             "content.patterns": [
                 {
                     "case-sensitive": true,
                     "pattern": "https://www.example.com/a/b/*"
                 }
             ],
             "content.urls": [
                 "https://www.example.com/a/index.html"
             ],
             "metadata.patterns": [
                 {
                     "pattern": "https://metadata.example.com/a/b/*"
                 }
             ],
             "type": "invalidate"
         }
     }
        
6.2. Examining Trigger Status
6.2. 检查触发器状态

Once Trigger Status Resources have been created, the uCDN can check their status as shown in the following examples.

创建触发器状态资源后,uCDN可以检查其状态,如以下示例所示。

6.2.1. Collection of All Triggers
6.2.1. 所有触发器的集合

The uCDN can fetch the collection of all Trigger Status Resources it has created that have not yet been deleted or removed as expired. After creation of the "preposition" and "invalidate" triggers shown above, this collection might look as follows:

uCDN可以获取其创建的所有触发器状态资源的集合,这些资源在过期时尚未删除或移除。创建如上所示的“介词”和“无效”触发器后,此集合可能如下所示:

REQUEST:

请求:

     GET /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 341
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "-936094426920308378"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 341
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "-936094426920308378"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "cdn-id": "AS64496:0",
         "coll-active": "/triggers/active",
         "coll-complete": "/triggers/complete",
         "coll-failed": "/triggers/failed",
         "coll-pending": "/triggers/pending",
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
     {
         "cdn-id": "AS64496:0",
         "coll-active": "/triggers/active",
         "coll-complete": "/triggers/complete",
         "coll-failed": "/triggers/failed",
         "coll-pending": "/triggers/pending",
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
6.2.2. Filtered Collections of Trigger Status Resources
6.2.2. 已筛选的触发器状态资源集合

The filtered collections are also available to the uCDN. Before the dCDN starts processing the two CI/T Trigger Commands shown above, both will appear in the collection of pending triggers. For example:

过滤后的集合也可用于uCDN。在dCDN开始处理上面显示的两个CI/T触发器命令之前,这两个命令都将出现在挂起的触发器集合中。例如:

REQUEST:

请求:

     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 152
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "4331492443626270781"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 152
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "4331492443626270781"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        

At this point, if no other Trigger Status Resources had been created, the other filtered views would be empty. For example:

此时,如果没有创建其他触发器状态资源,则其他筛选视图将为空。例如:

REQUEST:

请求:

     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 54
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "7958041393922269003"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 54
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "7958041393922269003"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "staleresourcetime": 86400,
         "triggers": []
     }
        
     {
         "staleresourcetime": 86400,
         "triggers": []
     }
        
6.2.3. Individual Trigger Status Resources
6.2.3. 单个触发器状态资源

The Trigger Status Resources can also be examined for details about individual CI/T Trigger Commands. For example, for the CI/T "preposition" and "invalidate" commands from previous examples:

还可以检查触发器状态资源,以了解有关单个CI/T触发器命令的详细信息。例如,对于前面示例中的CI/T“preposition”和“invalidate”命令:

REQUEST:

请求:

     GET /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 467
     Expires: Wed, 04 May 2016 08:49:10 GMT
     Server: example-server/0.1
     ETag: "6990548174277557683"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     HTTP/1.1 200 OK
     Content-Length: 467
     Expires: Wed, 04 May 2016 08:49:10 GMT
     Server: example-server/0.1
     ETag: "6990548174277557683"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     {
         "ctime": 1462351690,
         "etime": 1462351698,
         "mtime": 1462351690,
         "status": "pending",
         "trigger": {
             "content.urls": [
                 "https://www.example.com/a/b/c/1",
                 "https://www.example.com/a/b/c/2",
                 "https://www.example.com/a/b/c/3",
                 "https://www.example.com/a/b/c/4"
             ],
             "metadata.urls": [
                 "https://metadata.example.com/a/b/c"
             ],
             "type": "preposition"
         }
     }
        
     {
         "ctime": 1462351690,
         "etime": 1462351698,
         "mtime": 1462351690,
         "status": "pending",
         "trigger": {
             "content.urls": [
                 "https://www.example.com/a/b/c/1",
                 "https://www.example.com/a/b/c/2",
                 "https://www.example.com/a/b/c/3",
                 "https://www.example.com/a/b/c/4"
             ],
             "metadata.urls": [
                 "https://metadata.example.com/a/b/c"
             ],
             "type": "preposition"
         }
     }
        

REQUEST:

请求:

     GET /triggers/1 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/1 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 545
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "-554385204989405469"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     HTTP/1.1 200 OK
     Content-Length: 545
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "-554385204989405469"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     {
         "ctime": 1462351691,
         "etime": 1462351699,
         "mtime": 1462351691,
         "status": "pending",
         "trigger": {
             "content.patterns": [
                 {
                     "case-sensitive": true,
                     "pattern": "https://www.example.com/a/b/*"
                 }
             ],
             "content.urls": [
                 "https://www.example.com/a/index.html"
             ],
             "metadata.patterns": [
                 {
                     "pattern": "https://metadata.example.com/a/b/*"
                 }
             ],
             "type": "invalidate"
         }
     }
        
     {
         "ctime": 1462351691,
         "etime": 1462351699,
         "mtime": 1462351691,
         "status": "pending",
         "trigger": {
             "content.patterns": [
                 {
                     "case-sensitive": true,
                     "pattern": "https://www.example.com/a/b/*"
                 }
             ],
             "content.urls": [
                 "https://www.example.com/a/index.html"
             ],
             "metadata.patterns": [
                 {
                     "pattern": "https://metadata.example.com/a/b/*"
                 }
             ],
             "type": "invalidate"
         }
     }
        
6.2.4. Polling for Changes in Status
6.2.4. 轮询状态更改

The uCDN SHOULD use the ETags of collections or Trigger Status Resources when polling for changes in status, as shown in the following examples:

在轮询状态更改时,uCDN应使用集合的ETag或触发器状态资源,如以下示例所示:

REQUEST:

请求:

     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     If-None-Match: "4331492443626270781"
        
     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     If-None-Match: "4331492443626270781"
        

RESPONSE:

答复:

     HTTP/1.1 304 Not Modified
     Content-Length: 0
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "4331492443626270781"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 304 Not Modified
     Content-Length: 0
     Expires: Wed, 04 May 2016 08:49:11 GMT
     Server: example-server/0.1
     ETag: "4331492443626270781"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:11 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        

REQUEST:

请求:

     GET /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     If-None-Match: "6990548174277557683"
        
     GET /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
     If-None-Match: "6990548174277557683"
        

RESPONSE:

答复:

     HTTP/1.1 304 Not Modified
     Content-Length: 0
     Expires: Wed, 04 May 2016 08:49:10 GMT
     Server: example-server/0.1
     ETag: "6990548174277557683"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     HTTP/1.1 304 Not Modified
     Content-Length: 0
     Expires: Wed, 04 May 2016 08:49:10 GMT
     Server: example-server/0.1
     ETag: "6990548174277557683"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        

When the CI/T Trigger Command is complete, the contents of the filtered collections will be updated along with their ETags. For example, when the two example CI/T Trigger Commands are complete, the collections of pending and complete Trigger Status Resources might look like:

CI/T触发器命令完成后,过滤集合的内容将与其ETag一起更新。例如,当两个示例CI/T触发器命令完成时,挂起和完成触发器状态资源的集合可能如下所示:

REQUEST:

请求:

     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/pending HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 54
     Expires: Wed, 04 May 2016 08:49:15 GMT
     Server: example-server/0.1
     ETag: "1337503181677633762"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:15 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 54
     Expires: Wed, 04 May 2016 08:49:15 GMT
     Server: example-server/0.1
     ETag: "1337503181677633762"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:15 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "staleresourcetime": 86400,
         "triggers": []
     }
        
     {
         "staleresourcetime": 86400,
         "triggers": []
     }
        

REQUEST:

请求:

     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 152
     Expires: Wed, 04 May 2016 08:49:22 GMT
     Server: example-server/0.1
     ETag: "4481489539378529796"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 152
     Expires: Wed, 04 May 2016 08:49:22 GMT
     Server: example-server/0.1
     ETag: "4481489539378529796"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/0",
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
6.2.5. Deleting Trigger Status Resources
6.2.5. 删除触发器状态资源

The uCDN can delete completed and failed Trigger Status Resources to reduce the size of the collections, as described in Section 4.4. For example, to delete the "preposition" request from earlier examples:

uCDN可以删除已完成和失败的触发器状态资源,以减小集合的大小,如第4.4节所述。例如,要从前面的示例中删除“介词”请求,请执行以下操作:

REQUEST:

请求:

     DELETE /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     DELETE /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 204 No Content
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Length: 0
     Content-Type: text/html; charset=UTF-8
     Server: example-server/0.1
        
     HTTP/1.1 204 No Content
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Length: 0
     Content-Type: text/html; charset=UTF-8
     Server: example-server/0.1
        

This would, for example, cause the collection of completed Trigger Status Resources shown in the example above to be updated to:

例如,这将导致上面示例中显示的已完成触发器状态资源集合更新为:

REQUEST:

请求:

     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/complete HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 105
     Expires: Wed, 04 May 2016 08:49:22 GMT
     Server: example-server/0.1
     ETag: "-6938620031669085677"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     HTTP/1.1 200 OK
     Content-Length: 105
     Expires: Wed, 04 May 2016 08:49:22 GMT
     Server: example-server/0.1
     ETag: "-6938620031669085677"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:22 GMT
     Content-Type: application/cdni; ptype=ci-trigger-collection
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
     {
         "staleresourcetime": 86400,
         "triggers": [
             "https://dcdn.example.com/triggers/1"
         ]
     }
        
6.2.6. Error Reporting
6.2.6. 错误报告

In this example, the uCDN has requested pre-positioning of "https://newsite.example.com/index.html", but the dCDN was unable to locate metadata for that site:

在本例中,uCDN已请求预定位“https://newsite.example.com/index.html,但dCDN无法找到该站点的元数据:

REQUEST:

请求:

     GET /triggers/2 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        
     GET /triggers/2 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: dcdn.example.com
     Accept: */*
        

RESPONSE:

答复:

     HTTP/1.1 200 OK
     Content-Length: 486
     Expires: Wed, 04 May 2016 08:49:26 GMT
     Server: example-server/0.1
     ETag: "5182824839919043757"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:26 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     HTTP/1.1 200 OK
     Content-Length: 486
     Expires: Wed, 04 May 2016 08:49:26 GMT
     Server: example-server/0.1
     ETag: "5182824839919043757"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:26 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status
        
     {
         "ctime": 1462351702,
         "errors": [
             {
                 "content.urls": [
                     "https://newsite.example.com/index.html"
                 ],
                 "description": "newsite.example.com not in HostIndex",
                 "error": "emeta"
             }
         ],
         "etime": 1462351710,
         "mtime": 1462351706,
         "status": "active",
         "trigger": {
             "content.urls": [
                 "https://newsite.example.com/index.html"
             ],
             "type": "preposition"
         }
     }
        
     {
         "ctime": 1462351702,
         "errors": [
             {
                 "content.urls": [
                     "https://newsite.example.com/index.html"
                 ],
                 "description": "newsite.example.com not in HostIndex",
                 "error": "emeta"
             }
         ],
         "etime": 1462351710,
         "mtime": 1462351706,
         "status": "active",
         "trigger": {
             "content.urls": [
                 "https://newsite.example.com/index.html"
             ],
             "type": "preposition"
         }
     }
        
7. IANA Considerations
7. IANA考虑
7.1. CDNI Payload Type Parameter Registrations
7.1. CDNI有效负载类型参数注册

The IANA is requested to register the following new Payload Types in the "CDNI Payload Types" registry defined by [RFC7736], for use with the "application/cdni" MIME media type.

IANA需要在[RFC7736]定义的“CDNI有效负载类型”注册表中注册以下新的有效负载类型,以便与“应用程序/CDNI”MIME媒体类型一起使用。

                 +-----------------------+---------------+
                 | Payload Type          | Specification |
                 +-----------------------+---------------+
                 | ci-trigger-command    | RFC 8007      |
                 | ci-trigger-status     | RFC 8007      |
                 | ci-trigger-collection | RFC 8007      |
                 +-----------------------+---------------+
        
                 +-----------------------+---------------+
                 | Payload Type          | Specification |
                 +-----------------------+---------------+
                 | ci-trigger-command    | RFC 8007      |
                 | ci-trigger-status     | RFC 8007      |
                 | ci-trigger-collection | RFC 8007      |
                 +-----------------------+---------------+
        
7.2. "CDNI CI/T Trigger Types" Registry
7.2. “CDNI CI/T触发器类型”注册表

The IANA is requested to create a new "CDNI CI/T Trigger Types" subregistry under the "Content Delivery Network Interconnection (CDNI) Parameters" registry.

IANA被要求在“内容交付网络互连(CDNI)参数”注册表下创建一个新的“CDNI CI/T触发器类型”子区。

Additions to the "CDNI CI/T Trigger Types" registry will be made via the RFC Required policy as defined in [RFC5226].

将通过[RFC5226]中定义的RFC所需策略添加到“CDNI CI/T触发器类型”注册表中。

The initial contents of the "CDNI CI/T Trigger Types" registry comprise the names and descriptions listed in Section 5.2.2 of this document, with this document acting as the specification.

“CDNI CI/T触发器类型”注册表的初始内容包括本文件第5.2.2节中列出的名称和说明,本文件作为规范。

7.3. "CDNI CI/T Error Codes" Registry
7.3. “CDNI CI/T错误代码”注册表

The IANA is requested to create a new "CDNI CI/T Error Codes" subregistry under the "Content Delivery Network Interconnection (CDNI) Parameters" registry.

IANA被要求在“内容交付网络互连(CDNI)参数”注册表下创建一个新的“CDNI CI/T错误代码”子区。

Additions to the "CDNI CI/T Error Codes" registry will be made via the Specification Required policy as defined in [RFC5226]. The Designated Expert will verify that new Error Code registrations do not duplicate existing Error Code definitions (in name or functionality), prevent gratuitous additions to the namespace, and prevent any additions to the namespace that would impair the interoperability of CDNI implementations.

将通过[RFC5226]中定义的规范要求策略添加到“CDNI CI/T错误代码”注册表中。指定专家将验证新的错误代码注册不会与现有的错误代码定义(在名称或功能上)重复,防止对命名空间进行无端添加,并防止对命名空间进行任何可能损害CDNI实现互操作性的添加。

The initial contents of the "CDNI CI/T Error Codes" registry comprise the names and descriptions of the Error Codes listed in Section 5.2.7 of this document, with this document acting as the specification.

“CDNI CI/T错误代码”注册表的初始内容包括本文件第5.2.7节所列错误代码的名称和说明,本文件作为规范。

8. Security Considerations
8. 安全考虑

The CI/T interface provides a mechanism to allow a uCDN to generate requests into the dCDN and to inspect its own CI/T requests and their current states. The CI/T interface does not allow access to, or modification of, the uCDN or dCDN metadata relating to content delivery or to the content itself. It can only control the presence of that metadata in the dCDN, and the processing work and network utilization involved in ensuring that presence.

CI/T接口提供了一种机制,允许uCDN向dCDN生成请求,并检查其自身的CI/T请求及其当前状态。CI/T接口不允许访问或修改与内容交付或内容本身相关的uCDN或dCDN元数据。它只能控制该元数据在dCDN中的存在,以及确保该存在所涉及的处理工作和网络利用率。

By examining "preposition" requests to a dCDN, and correctly interpreting content and metadata URLs, an attacker could learn the uCDN's or content owner's predictions for future content popularity. By examining "invalidate" or "purge" requests, an attacker could learn about changes in the content owner's catalog.

通过检查对dCDN的“前置”请求,并正确解释内容和元数据URL,攻击者可以了解uCDN或内容所有者对未来内容流行度的预测。通过检查“无效”或“清除”请求,攻击者可以了解内容所有者目录中的更改。

By injecting CI/T Commands, an attacker or a misbehaving uCDN would generate work in the dCDN and uCDN as they process those requests. So would a man-in-the-middle attacker modifying valid CI/T Commands generated by the uCDN. In both cases, that would decrease the dCDN's caching efficiency by causing it to unnecessarily acquire or reacquire content metadata and/or content.

通过注入CI/T命令,攻击者或行为不端的uCDN将在处理这些请求时在dCDN和uCDN中生成工作。中间人攻击者也会修改uCDN生成的有效CI/T命令。在这两种情况下,都会导致dCDN不必要地获取或重新获取内容元数据和/或内容,从而降低dCDN的缓存效率。

A dCDN implementation of CI/T MUST restrict the actions of a uCDN to the data corresponding to that uCDN. Failure to do so would allow uCDNs to detrimentally affect each other's efficiency by generating unnecessary acquisition or reacquisition load.

CI/T的dCDN实现必须将uCDN的操作限制为与该uCDN对应的数据。如果不这样做,UCDN将产生不必要的获取或重新获取负载,从而对彼此的效率产生不利影响。

An origin that chooses to delegate its delivery to a CDN is trusting that CDN to deliver content on its behalf; the interconnection of CDNs is an extension of that trust to dCDNs. That trust relationship is a commercial arrangement, outside the scope of the CDNI protocols. So, while a malicious CDN could deliberately generate load on a dCDN using the CI/T interface, the protocol does not otherwise attempt to address malicious behavior between interconnected CDNs.

选择将其交付委托给CDN的源站信任CDN代表其交付内容;CDN的互连是这种信任对DCDN的扩展。这种信任关系是一种商业安排,不属于CDNI协议的范围。因此,尽管恶意CDN可能会故意使用CI/T接口在dCDN上生成负载,但该协议不会试图解决互连CDN之间的恶意行为。

8.1. Authentication, Authorization, Confidentiality, Integrity Protection

8.1. 身份验证、授权、机密性、完整性保护

A CI/T implementation MUST support Transport Layer Security (TLS) transport for HTTP (HTTPS) as per [RFC2818] and [RFC7230].

根据[RFC2818]和[RFC7230],CI/T实现必须支持HTTP(HTTPS)的传输层安全(TLS)传输。

TLS MUST be used by the server side (dCDN) and the client side (uCDN) of the CI/T interface, including authentication of the remote end, unless alternate methods are used for ensuring the security of the information in the CI/T interface requests and responses (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).

TLS必须由CI/T接口的服务器端(dCDN)和客户端(uCDN)使用,包括远程端的身份验证,除非使用替代方法确保CI/T接口请求和响应中信息的安全性(例如,在两个CDN之间设置IPsec隧道,或者在同一公司实体拥有的两个CDN之间使用物理安全的内部网络)。

The use of TLS for transport of the CI/T interface allows the dCDN and the uCDN to authenticate each other using TLS client authentication and TLS server authentication.

使用TLS传输CI/T接口允许dCDN和uCDN使用TLS客户端身份验证和TLS服务器身份验证相互验证。

Once the dCDN and the uCDN have mutually authenticated each other, TLS allows:

一旦dCDN和uCDN相互验证,TLS允许:

o The dCDN and the uCDN to authorize each other (to ensure that they are receiving CI/T Commands from, or reporting status to, an authorized CDN).

o dCDN和uCDN相互授权(以确保它们从授权CDN接收CI/T命令或向授权CDN报告状态)。

o CDNI commands and responses to be transmitted with confidentiality.

o CDNI命令和响应应保密传输。

o Protection of the integrity of CDNI commands and responses.

o 保护CDNI命令和响应的完整性。

When TLS is used, the general TLS usage guidance in [RFC7525] MUST be followed.

使用TLS时,必须遵守[RFC7525]中的一般TLS使用指南。

The mechanisms for access control are dCDN-specific and are not standardized as part of this CI/T specification.

访问控制机制是特定于dCDN的,未作为本CI/T规范的一部分进行标准化。

HTTP requests that attempt to access or operate on CI/T data belonging to another CDN MUST be rejected using, for example, HTTP 403 ("Forbidden") or 404 ("Not Found"). This is intended to prevent unauthorized users from generating unnecessary load in dCDNs or uCDNs due to revalidation, reacquisition, or unnecessary acquisition.

尝试访问或操作属于另一CDN的CI/T数据的HTTP请求必须使用HTTP 403(“禁止”)或404(“未找到”)等方式拒绝。这是为了防止未经授权的用户由于重新验证、重新获取或不必要的获取而在dCDNs或uCDNs中产生不必要的负载。

When deploying a network of interconnected CDNs, the possible inefficiencies related to the diamond configuration discussed in Section 2.2.1 should be considered.

部署互连CDN网络时,应考虑与第2.2.1节中讨论的菱形配置相关的可能低效率。

8.2. Denial of Service
8.2. 拒绝服务

This document does not define a specific mechanism to protect against Denial-of-Service (DoS) attacks on the CI/T interface. 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 the use of Virtual Private Networks (VPNs).

本文档未定义针对CI/T接口上的拒绝服务(DoS)攻击进行保护的特定机制。但是,可以通过使用TLS传输和/或通过CI/T接口范围之外的机制(如防火墙或虚拟专用网络(VPN))保护CI/T端点免受DoS攻击。

Depending on the implementation, triggered activity may consume significant processing and bandwidth in the dCDN. A malicious or faulty uCDN could use this to generate unnecessary load in the dCDN. The dCDN should consider mechanisms to avoid overload -- for example, by rate-limiting acceptance or processing of CI/T Commands, or by performing batch processing.

根据实现情况,触发的活动可能会消耗dCDN中的大量处理和带宽。恶意或有故障的uCDN可能会利用此功能在dCDN中生成不必要的负载。DCDN应该考虑避免过载的机制,例如,通过速率限制接受或处理CI /T命令,或者通过执行批处理。

8.3. Privacy
8.3. 隐私

The CI/T protocol does not carry any information about individual end users of a CDN; there are no privacy concerns for end users.

CI/T协议不携带关于CDN的单个最终用户的任何信息;终端用户没有隐私问题。

The CI/T protocol does carry information that could be considered commercially sensitive by CDN operators and content owners. The use of mutually authenticated TLS to establish a secure session for the transport of CI/T data, as discussed in Section 8.1, provides confidentiality while the CI/T data is in transit and prevents parties other than the authorized dCDN from gaining access to that data. The dCDN MUST ensure that it only exposes CI/T data related to a uCDN to clients it has authenticated as belonging to that uCDN.

CI/T协议确实包含CDN运营商和内容所有者可能认为具有商业敏感性的信息。如第8.1节所述,使用相互认证的TLS为CI/T数据的传输建立安全会话,可在CI/T数据传输过程中提供机密性,并防止授权dCDN以外的各方访问该数据。dCDN必须确保它只将与uCDN相关的CI/T数据公开给它已验证为属于该uCDN的客户端。

9. References
9. 工具书类
9.1. Normative References
9.1. 规范性引用文件

[RFC1930] Hawkinson, J. and T. Bates, "Guidelines for creation, selection, and registration of an Autonomous System (AS)", BCP 6, RFC 1930, DOI 10.17487/RFC1930, March 1996, <http://www.rfc-editor.org/info/rfc1930>.

[RFC1930]霍金森,J.和T.贝茨,“自主系统(AS)的创建、选择和注册指南”,BCP 6,RFC 1930,DOI 10.17487/RFC1930,1996年3月<http://www.rfc-editor.org/info/rfc1930>.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,DOI 10.17487/RFC2119,1997年3月<http://www.rfc-editor.org/info/rfc2119>.

[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, DOI 10.17487/RFC2818, May 2000, <http://www.rfc-editor.org/info/rfc2818>.

[RFC2818]Rescorla,E.,“TLS上的HTTP”,RFC 2818,DOI 10.17487/RFC2818,2000年5月<http://www.rfc-editor.org/info/rfc2818>.

[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005, <http://www.rfc-editor.org/info/rfc3986>.

[RFC3986]Berners Lee,T.,Fielding,R.,和L.Masinter,“统一资源标识符(URI):通用语法”,STD 66,RFC 3986,DOI 10.17487/RFC3986,2005年1月<http://www.rfc-editor.org/info/rfc3986>.

[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, DOI 10.17487/RFC5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5226]Narten,T.和H.Alvestrand,“在RFCs中编写IANA注意事项部分的指南”,BCP 26,RFC 5226,DOI 10.17487/RFC5226,2008年5月<http://www.rfc-editor.org/info/rfc5226>.

[RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content Distribution Network Interconnection (CDNI) Problem Statement", RFC 6707, DOI 10.17487/RFC6707, September 2012, <http://www.rfc-editor.org/info/rfc6707>.

[RFC6707]Niven Jenkins,B.,Le Faucheur,F.,和N.Bitar,“内容分发网络互连(CDNI)问题声明”,RFC 6707,DOI 10.17487/RFC6707,2012年9月<http://www.rfc-editor.org/info/rfc6707>.

[RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March 2014, <http://www.rfc-editor.org/info/rfc7159>.

[RFC7159]Bray,T.,Ed.“JavaScript对象表示法(JSON)数据交换格式”,RFC 7159,DOI 10.17487/RFC7159,2014年3月<http://www.rfc-editor.org/info/rfc7159>.

[RFC7230] Fielding, R., Ed., and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing", RFC 7230, DOI 10.17487/RFC7230, June 2014, <http://www.rfc-editor.org/info/rfc7230>.

[RFC7230]Fielding,R.,Ed.,和J.Reschke,Ed.,“超文本传输协议(HTTP/1.1):消息语法和路由”,RFC 7230,DOI 10.17487/RFC7230,2014年6月<http://www.rfc-editor.org/info/rfc7230>.

[RFC7231] Fielding, R., Ed., and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content", RFC 7231, DOI 10.17487/RFC7231, June 2014, <http://www.rfc-editor.org/info/rfc7231>.

[RFC7231]Fielding,R.,Ed.,和J.Reschke,Ed.,“超文本传输协议(HTTP/1.1):语义和内容”,RFC 7231,DOI 10.17487/RFC72312014年6月<http://www.rfc-editor.org/info/rfc7231>.

[RFC7232] Fielding, R., Ed., and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests", RFC 7232, DOI 10.17487/RFC7232, June 2014, <http://www.rfc-editor.org/info/rfc7232>.

[RFC7232]Fielding,R.,Ed.,和J.Reschke,Ed.,“超文本传输协议(HTTP/1.1):条件请求”,RFC 7232,DOI 10.17487/RFC72322014年6月<http://www.rfc-editor.org/info/rfc7232>.

[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015, <http://www.rfc-editor.org/info/rfc7525>.

[RFC7525]Sheffer,Y.,Holz,R.,和P.Saint Andre,“安全使用传输层安全性(TLS)和数据报传输层安全性(DTLS)的建议”,BCP 195,RFC 7525,DOI 10.17487/RFC7525,2015年5月<http://www.rfc-editor.org/info/rfc7525>.

[RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, "Content Delivery Network Interconnection (CDNI) Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, <http://www.rfc-editor.org/info/rfc8006>.

[RFC8006]Niven Jenkins,B.,Murray,R.,Caulfield,M.,和K.Ma,“内容交付网络互连(CDNI)元数据”,RFC 8006,DOI 10.17487/RFC8006,2016年12月<http://www.rfc-editor.org/info/rfc8006>.

9.2. Informative References
9.2. 资料性引用

[CBOR-CDDL] Vigano, C. and H. Birkholz, "CBOR data definition language (CDDL): a notational convention to express CBOR data structures", Work in Progress, draft-greevenbosch-appsawg-cbor-cddl-09, September 2016.

[CBOR-CDDL]Vigano,C.和H.Birkholz,“CBOR数据定义语言(CDDL):表达CBOR数据结构的符号约定”,正在进行的工作,草稿-greevenbosch-appsawg-CBOR-CDDL-092016年9月。

[RFC7336] Peterson, L., Davie, B., and R. van Brandenburg, Ed., "Framework for Content Distribution Network Interconnection (CDNI)", RFC 7336, DOI 10.17487/RFC7336, August 2014, <http://www.rfc-editor.org/info/rfc7336>.

[RFC7336]Peterson,L.,Davie,B.,和R.van Brandenburg,编辑,“内容分发网络互连框架(CDNI)”,RFC 7336,DOI 10.17487/RFC7336,2014年8月<http://www.rfc-editor.org/info/rfc7336>.

[RFC7337] Leung, K., Ed., and Y. Lee, Ed., "Content Distribution Network Interconnection (CDNI) Requirements", RFC 7337, DOI 10.17487/RFC7337, August 2014, <http://www.rfc-editor.org/info/rfc7337>.

[RFC7337]Leung,K.,Ed.,和Y.Lee,Ed.“内容分发网络互连(CDNI)要求”,RFC 7337,DOI 10.17487/RFC7337,2014年8月<http://www.rfc-editor.org/info/rfc7337>.

[RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, December 2015, <http://www.rfc-editor.org/info/rfc7736>.

[RFC7736]马,K,“内容交付网络互连(CDNI)媒体类型注册”,RFC 7736,DOI 10.17487/RFC7736,2015年12月<http://www.rfc-editor.org/info/rfc7736>.

[RFC7975] Niven-Jenkins, B., Ed., and R. van Brandenburg, Ed., "Request Routing Redirection Interface for Content Delivery Network (CDN) Interconnection", RFC 7975, DOI 10.17487/RFC7975, October 2016, <http://www.rfc-editor.org/info/rfc7975>.

[RFC7975]Niven Jenkins,B.,Ed.,和R.van Brandenburg,Ed.,“内容交付网络(CDN)互连的请求路由重定向接口”,RFC 7975,DOI 10.17487/RFC7975,2016年10月<http://www.rfc-editor.org/info/rfc7975>.

Appendix A. Formalization of the JSON Data
附录A.JSON数据的形式化

This appendix is non-normative.

本附录为非规范性附录。

The JSON data described in this document has been formalized using the CBOR Data Definition Language (CDDL) [CBOR-CDDL] (where "CBOR" means "Concise Binary Object Representation"), as follows:

本文档中描述的JSON数据已使用CBOR数据定义语言(CDDL)[CBOR-CDDL](其中“CBOR”表示“简明二进制对象表示”)形式化,如下所示:

 CIT-object = CIT-command / Trigger-Status-Resource / Trigger-Collection
        
 CIT-object = CIT-command / Trigger-Status-Resource / Trigger-Collection
        
 CIT-command ; use media type application/cdni; ptype=ci-trigger-command
 = {
   ? trigger: Triggerspec
   ? cancel: [* URI]
   cdn-path: [* Cdn-PID]
 }
        
 CIT-command ; use media type application/cdni; ptype=ci-trigger-command
 = {
   ? trigger: Triggerspec
   ? cancel: [* URI]
   cdn-path: [* Cdn-PID]
 }
        
 Trigger-Status-Resource ; application/cdni; ptype=ci-trigger-status
 = {
   trigger: Triggerspec
   ctime: Absolute-Time
   mtime: Absolute-Time
   ? etime: Absolute-Time
   status: Trigger-Status
   ? errors: [* Error-Description]
 }
        
 Trigger-Status-Resource ; application/cdni; ptype=ci-trigger-status
 = {
   trigger: Triggerspec
   ctime: Absolute-Time
   mtime: Absolute-Time
   ? etime: Absolute-Time
   status: Trigger-Status
   ? errors: [* Error-Description]
 }
        
 Trigger-Collection ; application/cdni; ptype=ci-trigger-collection
 = {
   triggers: [* URI]
   ? staleresourcetime: int ; time in seconds
   ? coll-all: URI
   ? coll-pending: URI
   ? coll-active: URI
   ? coll-complete: URI
   ? coll-failed: URI
   ? cdn-id: Cdn-PID
 }
        
 Trigger-Collection ; application/cdni; ptype=ci-trigger-collection
 = {
   triggers: [* URI]
   ? staleresourcetime: int ; time in seconds
   ? coll-all: URI
   ? coll-pending: URI
   ? coll-active: URI
   ? coll-complete: URI
   ? coll-failed: URI
   ? cdn-id: Cdn-PID
 }
        
 Triggerspec = { ; see Section 5.2.1
   type: Trigger-Type
   ? metadata.urls: [* URI]
   ? content.urls: [* URI]
   ? content.ccid: [* Ccid]
   ? metadata.patterns: [* Pattern-Match]
   ? content.patterns: [* Pattern-Match]
 }
        
 Triggerspec = { ; see Section 5.2.1
   type: Trigger-Type
   ? metadata.urls: [* URI]
   ? content.urls: [* URI]
   ? content.ccid: [* Ccid]
   ? metadata.patterns: [* Pattern-Match]
   ? content.patterns: [* Pattern-Match]
 }
        
 Trigger-Type = "preposition" / "invalidate"
    / "purge" ; see Section 5.2.2
        
 Trigger-Type = "preposition" / "invalidate"
    / "purge" ; see Section 5.2.2
        
 Trigger-Status = "pending" / "active" / "complete" / "processed"
    / "failed" / "cancelling" / "cancelled" ; see Section 5.2.3
        
 Trigger-Status = "pending" / "active" / "complete" / "processed"
    / "failed" / "cancelling" / "cancelled" ; see Section 5.2.3
        
 Pattern-Match = { ; see Section 5.2.4
   pattern: tstr
   ? case-sensitive: bool
   ? match-query-string: bool
 }
        
 Pattern-Match = { ; see Section 5.2.4
   pattern: tstr
   ? case-sensitive: bool
   ? match-query-string: bool
 }
        

Absolute-Time = number ; seconds since UNIX epoch (Section 5.2.5)

绝对时间=数量;UNIX纪元后的秒数(第5.2.5节)

 Error-Description = { ; see Section 5.2.6
   error: Error-Code
   ? metadata.urls: [* URI]
   ? content.urls: [* URI]
   ? metadata.patterns: [* Pattern-Match]
   ? content.patterns: [* Pattern-Match]
   ? description: tstr
 }
        
 Error-Description = { ; see Section 5.2.6
   error: Error-Code
   ? metadata.urls: [* URI]
   ? content.urls: [* URI]
   ? metadata.patterns: [* Pattern-Match]
   ? content.patterns: [* Pattern-Match]
   ? description: tstr
 }
        
 Error-Code = "emeta" / "econtent" / "eperm" / "ereject"
    / "ecdn" / "ecanceled"  ; see Section 5.2.7
        
 Error-Code = "emeta" / "econtent" / "eperm" / "ereject"
    / "ecdn" / "ecanceled"  ; see Section 5.2.7
        

Ccid = tstr ; see RFC 8006

Ccid=tstr;见RFC 8006

 Cdn-PID = tstr .regexp "AS[0-9]+:[0-9]+"
        
 Cdn-PID = tstr .regexp "AS[0-9]+:[0-9]+"
        
 URI = tstr
        
 URI = tstr
        

Acknowledgments

致谢

The authors thank Kevin Ma for his input, and Carsten Bormann for his review and formalization of the JSON data.

作者感谢Kevin Ma的输入,感谢Carsten Bormann对JSON数据的审查和形式化。

Authors' Addresses

作者地址

Rob Murray Nokia 3 Ely Road Milton, Cambridge CB24 6DD United Kingdom

Rob Murray Nokia 3 Ely Road Milton,剑桥CB24 6DD英国

   Email: rob.murray@nokia.com
        
   Email: rob.murray@nokia.com
        

Ben Niven-Jenkins Nokia 3 Ely Road Milton, Cambridge CB24 6DD United Kingdom

英国剑桥市弥尔顿伊利路3号Ben Niven Jenkins诺基亚CB24 6DD

   Email: ben.niven-jenkins@nokia.com
        
   Email: ben.niven-jenkins@nokia.com