draft-ietf-cdni-logging-18.txt | draft-ietf-cdni-logging-19.txt | |||
---|---|---|---|---|
Internet Engineering Task Force F. Le Faucheur, Ed. | Internet Engineering Task Force F. Le Faucheur, Ed. | |||
Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
Intended status: Standards Track G. Bertrand, Ed. | Intended status: Standards Track G. Bertrand, Ed. | |||
Expires: September 22, 2015 I. Oprescu, Ed. | Expires: January 5, 2016 I. Oprescu, Ed. | |||
Orange | Orange | |||
R. Peterkofsky | R. Peterkofsky | |||
Skytide, Inc. | Skytide, Inc. | |||
March 21, 2015 | July 4, 2015 | |||
CDNI Logging Interface | CDNI Logging Interface | |||
draft-ietf-cdni-logging-18 | draft-ietf-cdni-logging-19 | |||
Abstract | Abstract | |||
This memo specifies the Logging interface between a downstream CDN | This memo specifies the Logging interface between a downstream CDN | |||
(dCDN) and an upstream CDN (uCDN) that are interconnected as per the | (dCDN) and an upstream CDN (uCDN) that are interconnected as per the | |||
CDN Interconnection (CDNI) framework. First, it describes a | CDN Interconnection (CDNI) framework. First, it describes a | |||
reference model for CDNI logging. Then, it specifies the CDNI | reference model for CDNI logging. Then, it specifies the CDNI | |||
Logging File format and the actual protocol for exchange of CDNI | Logging File format and the actual protocol for exchange of CDNI | |||
Logging Files. | Logging Files. | |||
skipping to change at page 1, line 39 | skipping to change at line 38 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on September 22, 2015. | This Internet-Draft will expire on January 5, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology | |||
1.2. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 1.2. Requirements Language | |||
2. CDNI Logging Reference Model . . . . . . . . . . . . . . . . 5 | 2. CDNI Logging Reference Model | |||
2.1. CDNI Logging interactions . . . . . . . . . . . . . . . . 5 | 2.1. CDNI Logging interactions | |||
2.2. Overall Logging Chain . . . . . . . . . . . . . . . . . . 8 | 2.2. Overall Logging Chain | |||
2.2.1. Logging Generation and During-Generation Aggregation 9 | 2.2.1. Logging Generation and During-Generation Aggregation | |||
2.2.2. Logging Collection . . . . . . . . . . . . . . . . . 10 | 2.2.2. Logging Collection | |||
2.2.3. Logging Filtering . . . . . . . . . . . . . . . . . . 10 | 2.2.3. Logging Filtering | |||
2.2.4. Logging Rectification and Post-Generation Aggregation 11 | 2.2.4. Logging Rectification and Post-Generation Aggregation | |||
2.2.5. Log-Consuming Applications . . . . . . . . . . . . . 12 | 2.2.5. Log-Consuming Applications | |||
2.2.5.1. Maintenance/Debugging . . . . . . . . . . . . . . 12 | 2.2.5.1. Maintenance/Debugging | |||
2.2.5.2. Accounting . . . . . . . . . . . . . . . . . . . 12 | 2.2.5.2. Accounting | |||
2.2.5.3. Analytics and Reporting . . . . . . . . . . . . . 13 | 2.2.5.3. Analytics and Reporting | |||
2.2.5.4. Content Protection . . . . . . . . . . . . . . . 13 | 2.2.5.4. Content Protection | |||
2.2.5.5. Notions common to multiple Log Consuming | 2.2.5.5. Notions common to multiple Log Consuming | |||
Applications . . . . . . . . . . . . . . . . . . 13 | Applications | |||
3. CDNI Logging File . . . . . . . . . . . . . . . . . . . . . . 15 | 3. CDNI Logging File | |||
3.1. Rules . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.1. Rules | |||
3.2. CDNI Logging File Structure . . . . . . . . . . . . . . . 17 | 3.2. CDNI Logging File Structure | |||
3.3. CDNI Logging Directives . . . . . . . . . . . . . . . . . 19 | 3.3. CDNI Logging Directives | |||
3.4. CDNI Logging Records . . . . . . . . . . . . . . . . . . 23 | 3.4. CDNI Logging Records | |||
3.4.1. HTTP Request Logging Record . . . . . . . . . . . . . 24 | 3.4.1. HTTP Request Logging Record | |||
3.5. CDNI Logging File Example . . . . . . . . . . . . . . . . 34 | 3.5. CDNI Logging File Example | |||
3.6. Cascaded CDNI Logging Files Example . . . . . . . . . . . 35 | 3.6. Cascaded CDNI Logging Files Example | |||
4. Protocol for Exchange of CDNI Logging File After Full | 4. Protocol for Exchange of CDNI Logging File After Full | |||
Collection . . . . . . . . . . . . . . . . . . . . . . . . . 38 | Collection | |||
4.1. CDNI Logging Feed . . . . . . . . . . . . . . . . . . . . 39 | 4.1. CDNI Logging Feed | |||
4.1.1. Atom Formatting . . . . . . . . . . . . . . . . . . . 39 | 4.1.1. Atom Formatting | |||
4.1.2. Updates to Log Files and the Feed . . . . . . . . . . 39 | 4.1.2. Updates to Log Files and the Feed | |||
4.1.3. Redundant Feeds . . . . . . . . . . . . . . . . . . . 40 | 4.1.3. Redundant Feeds | |||
4.1.4. Example CDNI Logging Feed . . . . . . . . . . . . . . 40 | 4.1.4. Example CDNI Logging Feed | |||
4.2. CDNI Logging File Pull . . . . . . . . . . . . . . . . . 42 | 4.2. CDNI Logging File Pull | |||
5. Protocol for Exchange of CDNI Logging File During Collection 43 | 5. Protocol for Exchange of CDNI Logging File During Collection | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | 6. IANA Considerations | |||
6.1. CDNI Logging Directive Names Registry . . . . . . . . . . 44 | 6.1. CDNI Logging Directive Names Registry | |||
6.2. CDNI Logging File Version Registry . . . . . . . . . . . 44 | 6.2. CDNI Logging File version Registry | |||
6.3. CDNI Logging Record-Types Registry . . . . . . . . . . . 45 | 6.3. CDNI Logging record-types Registry | |||
6.4. CDNI Logging Field Names Registry . . . . . . . . . . . . 46 | 6.4. CDNI Logging Field Names Registry | |||
6.5. CDNI Logging MIME Media Type . . . . . . . . . . . . . . 47 | 6.5. CDNI Logging MIME Media Type | |||
7. Security Considerations | ||||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 47 | ||||
7.1. Authentication, Authorization, Confidentiality, Integrity | 7.1. Authentication, Authorization, Confidentiality, Integrity | |||
Protection . . . . . . . . . . . . . . . . . . . . . . . 48 | Protection | |||
7.2. Denial of Service . . . . . . . . . . . . . . . . . . . . 49 | 7.2. Denial of Service | |||
7.3. Privacy . . . . . . . . . . . . . . . . . . . . . . . . . 49 | 7.3. Privacy | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | 8. Acknowledgments | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 9. References | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 9.1. Normative References | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 51 | 9.2. Informative References | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
This memo specifies the CDNI Logging interface between a downstream | This memo specifies the CDNI Logging interface between a downstream | |||
CDN (dCDN) and an upstream CDN (uCDN). First, it describes a | CDN (dCDN) and an upstream CDN (uCDN). First, it describes a | |||
reference model for CDNI logging. Then, it specifies the CDNI | reference model for CDNI logging. Then, it specifies the CDNI | |||
Logging File format and the actual protocol for exchange of CDNI | Logging File format and the actual protocol for exchange of CDNI | |||
Logging Files. | Logging Files. | |||
The reader should be familiar with the following documents: | The reader should be familiar with the following documents: | |||
skipping to change at page 4, line 21 | skipping to change at line 161 | |||
using the CDNI Logging Interface. | using the CDNI Logging Interface. | |||
Logging information: logging information generated and collected | Logging information: logging information generated and collected | |||
within a CDN or obtained from another CDN using the CDNI Logging | within a CDN or obtained from another CDN using the CDNI Logging | |||
Interface. | Interface. | |||
CDNI Logging Field: an atomic element of information that can be | CDNI Logging Field: an atomic element of information that can be | |||
included in a CDNI Logging Record. The time an event/task started, | included in a CDNI Logging Record. The time an event/task started, | |||
the IP address of an End User to whom content was delivered, and the | the IP address of an End User to whom content was delivered, and the | |||
Uniform Resource Identifier (URI) of the content delivered, are | Uniform Resource Identifier (URI) of the content delivered, are | |||
examples of CDNI Logging Fields. | examples of CDNI Logging fields. | |||
CDNI Logging Record: an information record providing information | CDNI Logging Record: an information record providing information | |||
about a specific event. This comprises a collection of CDNI Logging | about a specific event. This comprises a collection of CDNI Logging | |||
Fields. | fields. | |||
CDNI Logging File: a file containing CDNI Logging Records, as well as | CDNI Logging File: a file containing CDNI Logging Records, as well as | |||
additional information facilitating the processing of the CDNI | additional information facilitating the processing of the CDNI | |||
Logging Records. | Logging Records. | |||
CDN Reporting: the process of providing the relevant information that | CDN Reporting: the process of providing the relevant information that | |||
will be used to create a formatted content delivery report provided | will be used to create a formatted content delivery report provided | |||
to the CSP in deferred time. Such information typically includes | to the CSP in deferred time. Such information typically includes | |||
aggregated data that can cover a large period of time (e.g., from | aggregated data that can cover a large period of time (e.g., from | |||
hours to several months). Uses of Reporting include the collection | hours to several months). Uses of Reporting include the collection | |||
skipping to change at page 5, line 14 | skipping to change at line 203 | |||
2. CDNI Logging Reference Model | 2. CDNI Logging Reference Model | |||
2.1. CDNI Logging interactions | 2.1. CDNI Logging interactions | |||
The CDNI logging reference model between a given uCDN and a given | The CDNI logging reference model between a given uCDN and a given | |||
dCDN involves the following interactions: | dCDN involves the following interactions: | |||
o customization by the uCDN of the CDNI Logging information to be | o customization by the uCDN of the CDNI Logging information to be | |||
provided by the dCDN to the uCDN (e.g., control of which CDNI | provided by the dCDN to the uCDN (e.g., control of which CDNI | |||
Logging Fields are to be communicated to the uCDN for a given task | Logging fields are to be communicated to the uCDN for a given task | |||
performed by the dCDN or control of which types of events are to | performed by the dCDN or control of which types of events are to | |||
be logged). The dCDN takes into account this CDNI Logging | be logged). The dCDN takes into account this CDNI Logging | |||
customization information to determine what Logging information to | customization information to determine what Logging information to | |||
provide to the uCDN, but it may, or may not, take into account | provide to the uCDN, but it may, or may not, take into account | |||
this CDNI Logging customization information to influence what CDN | this CDNI Logging customization information to influence what CDN | |||
logging information is to be generated and collected within the | logging information is to be generated and collected within the | |||
dCDN (e.g., even if the uCDN requests a restricted subset of the | dCDN (e.g., even if the uCDN requests a restricted subset of the | |||
logging information, the dCDN may elect to generate a broader set | logging information, the dCDN may elect to generate a broader set | |||
of logging information). The mechanism to support the | of logging information). The mechanism to support the | |||
customization by the uCDN of CDNI Logging information is outside | customization by the uCDN of CDNI Logging information is outside | |||
skipping to change at page 7, line 16 | skipping to change at line 302 | |||
+-----+ | +-----+ | |||
| CSP | | | CSP | | |||
+-----+ | +-----+ | |||
^ Reporting and monitoring data | ^ Reporting and monitoring data | |||
* Billing | * Billing | |||
,--*--. | ,--*--. | |||
Logging ,-' `-. | Logging ,-' `-. | |||
Data =>( uCDN )<= Logging | Data =>( uCDN )<= Logging | |||
// `-. _,-' \\ Data | // `-. _,-' \\ Data | |||
|| `-'-'-' || | || `-'-'-' || | |||
,-----. ,-----. | ,-----. ,-----. | |||
,-' `-. ,-' `-. | ,-' `-. ,-' `-. | |||
( dCDN-1 ) ( dCDN-2 )<== Logging | ( dCDN-1 ) ( dCDN-2 )<== Logging | |||
`-. ,-' `-. _,-' \\ Data | `-. ,-' `-. _,-' \\ Data | |||
`--'--' `--'-' || | `--'--' `--'-' || | |||
,-----. | ,-----. | |||
,' `-. | ,' `-. | |||
( dCDN-3 ) | ( dCDN-3 ) | |||
`. ,-' | `. ,-' | |||
`--'--' | `--'--' | |||
skipping to change at page 16, line 4 | skipping to change at line 682 | |||
CR = %x0D ; carriage return | CR = %x0D ; carriage return | |||
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | |||
DIGIT = %x30-39 ; 0-9 | DIGIT = %x30-39 ; 0-9 | |||
DQUOTE = %x22 ; " (Double Quote) | DQUOTE = %x22 ; " (Double Quote) | |||
CRLF = CR LF ; Internet standard newline | CRLF = CR LF ; Internet standard newline | |||
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" | HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" | |||
HTAB = %x09 ; horizontal tab | HTAB = %x09 ; horizontal tab | |||
LF = %x0A ; linefeed | LF = %x0A ; linefeed | |||
VCHAR = %x21-7E ; visible (printing) characters | ||||
OCTET = %x00-FF ; 8 bits of data | OCTET = %x00-FF ; 8 bits of data | |||
The present document also uses the following rules from [RFC3986]: | The present document also uses the following rules from [RFC3986]: | |||
host = as specified in section 3.2.2 of [RFC3986]. | host = as specified in section 3.2.2 of [RFC3986]. | |||
IPv4address = as specified in section 3.2.2 of [RFC3986]. | IPv4address = as specified in section 3.2.2 of [RFC3986]. | |||
IPv6address = as specified in section 3.2.2 of [RFC3986]. | IPv6address = as specified in section 3.2.2 of [RFC3986]. | |||
The present document also defines the following additional rules: | The present document also defines the following additional rules: | |||
ADDRESS = IPv4address / IPv6address | ADDRESS = IPv4address / IPv6address | |||
ALPHANUM = ALPHA / DIGIT | ALPHANUM = ALPHA / DIGIT | |||
DATE = 4DIGIT "-" 2DIGIT "-" 2DIGIT | DATE = 4DIGIT "-" 2DIGIT "-" 2DIGIT | |||
Dates are encoded as "full-date" specified in [RFC3339]. | ; Dates are encoded as "full-date" specified in [RFC3339]. | |||
DEC = 1*DIGIT ["." *DIGIT] | DEC = 1*DIGIT ["." *DIGIT] | |||
NAMEFORMAT = ALPHANUM *(ALPHANUM / "_" / "-") | NAMEFORMAT = ALPHANUM *(ALPHANUM / "_" / "-") | |||
QSTRING = DQUOTE *NDQUOTE DQUOTE | QSTRING = DQUOTE *(NDQUOTE / PCT-ENCODED) DQUOTE | |||
NDQUOTE = <any OCTET excluding DQUOTE> / 2DQUOTE ; whereby a | NDQUOTE = %x21 / %x23-24 / %x26-7E / (DQUOTE DQUOTE) | |||
DQUOTE is conveyed inside a QSTRING unambiguously by repeating it. | ||||
[Editor's Note: The definition of NDQUOTE is being discussed as | ; whereby a DQUOTE is conveyed inside a QSTRING unambiguously | |||
part of IESG review and needs editing] | by escaping it with PCT-ENCODED. | |||
NHTABSTRING = *NHTAB | PCT-ENCODED = "%" HEXDIG HEXDIG | |||
NHTAB = <any OCTET excluding HTAB, CR and LF> | ; percent encoding is used for escaping octets that might be | |||
possible in HTTP headers such as bare CR, bare LF, CR LF, HTAB, | ||||
SP or null. These octets are rendered with percent encoding in | ||||
ABNF as specified by [RFC3986] in order to avoid considering | ||||
them as separators for the logging records. | ||||
NHTABSTRING = *(SP / VCHAR) | ||||
TIME = 2DIGIT ":" 2DIGIT ":" 2DIGIT ["." *DIGIT] | TIME = 2DIGIT ":" 2DIGIT ":" 2DIGIT ["." *DIGIT] | |||
Times are encoded as "partial-time" specified in [RFC3339]. | ; Times are encoded as "partial-time" specified in [RFC3339]. | |||
USER-COMMENT = * (SP / VCHAR / UTF8-2 / UTF8-3 / UTF8-4) | ||||
3.2. CDNI Logging File Structure | 3.2. CDNI Logging File Structure | |||
As defined in Section 1.1: a CDNI Logging Field is as an atomic | As defined in Section 1.1: a CDNI Logging Field is as an atomic | |||
logging information element, a CDNI Logging Record is a collection of | logging information element, a CDNI Logging Record is a collection of | |||
CDNI Logging Fields containing all logging information corresponding | CDNI Logging fields containing all logging information corresponding | |||
to a single logging event, and a CDNI Logging File contains a | to a single logging event, and a CDNI Logging File contains a | |||
collection of CDNI Logging Records. This structure is illustrated in | collection of CDNI Logging Records. This structure is illustrated in | |||
Figure 3. The use of a file structure for transfer of CDNI Logging | Figure 3. The use of a file structure for transfer of CDNI Logging | |||
information is selected since this is the most common practise today | information is selected since this is the most common practise today | |||
for exchange of logging information within and across CDNs. | for exchange of logging information within and across CDNs. | |||
+----------------------------------------------------------+ | +----------------------------------------------------------+ | |||
|CDNI Logging File | | |CDNI Logging File | | |||
| | | | | | |||
| #Directive 1 | | | #Directive 1 | | |||
skipping to change at page 19, line 15 | skipping to change at line 807 | |||
comply with the present document. The W3C Extended Log File Format | comply with the present document. The W3C Extended Log File Format | |||
was used as a starting point, reused where possible and expanded when | was used as a starting point, reused where possible and expanded when | |||
necessary. | necessary. | |||
Using a format that resembles the W3C Extended Log File Format is | Using a format that resembles the W3C Extended Log File Format is | |||
intended to keep CDNI logging format close to the intra-CDN Logging | intended to keep CDNI logging format close to the intra-CDN Logging | |||
information format commonly used in CDNs today, thereby minimizing | information format commonly used in CDNs today, thereby minimizing | |||
systematic translation at CDN/CDNI boundary. | systematic translation at CDN/CDNI boundary. | |||
A CDNI Logging File MUST contain a sequence of lines containing US- | A CDNI Logging File MUST contain a sequence of lines containing US- | |||
ASCII characters [CHAR_SET] terminated by CRLF. [Editor's Note: This | ASCII characters [CHAR_SET] terminated by CRLF. Each line of a CDNI | |||
needs editing to explain explain how CRLF/HTAB inside a QSTRING does | Logging File MUST contain either a directive or a CDNI Logging | |||
not act as a separator. ] | Record. | |||
Each line of a CDNI Logging File MUST contain either a directive or a | ||||
CDNI Logging Record. | ||||
Directives record information about the CDNI Logging process itself. | Directives record information about the CDNI Logging process itself. | |||
Lines containing directives MUST begin with the "#" character. | Lines containing directives MUST begin with the "#" character. | |||
Directives are specified in Section 3.3. | Directives are specified in Section 3.3. | |||
Logging Records provide actual details of the logged event. Logging | Logging Records provide actual details of the logged event. Logging | |||
Records are specified in Section 3.4. | Records are specified in Section 3.4. | |||
The CDNI Logging File ("CDNILOGFILE") structure is defined by the | The CDNI Logging File has a specific structure. It always starts | |||
following rules: | with a directive line and the first directive it contains MUST be the | |||
version. | ||||
The directive lines form together a group that contains at least one | ||||
directive line. Each directives group is followed by a group of | ||||
logging records. The records group contains zero or more actual | ||||
logging record lines about the event being logged. A record line | ||||
consists of the values corresponding to all or a subset of the | ||||
possible Logging fields defined within the scope of the record-type | ||||
directive. These values MUST appear in the order defined by the | ||||
fields directive. | ||||
Note that future extensions MUST be compliant with the previous | ||||
description. The following examples depict the structure of a | ||||
CDNILOGFILE as defined currently by the record-type | ||||
"cdni_http_request_v1." The record line in this example enumerates | ||||
strictly what is presently defined in the fields directive of the | ||||
record-type "cdni_http_request_v1." | ||||
DIRLINE = "#" directive CRLF | DIRLINE = "#" directive CRLF | |||
DIRGROUP = 1*DIRLINE | DIRGROUP = 1*DIRLINE | |||
RECLINE = CDNILOGREC CRLF | RECLINE = 1* ([date HTAB] [time HTAB] [time-taken HTAB] [c-ip | |||
HTAB] [c-ip-anonymizing HTAB] [c-port HTAB] [s-ip HTAB] | ||||
[s-hostname HTAB] [s-port HTAB] [cs-method HTAB] [cs-uri HTAB] | ||||
[u-uri HTAB] [protocol HTAB] [sc-status HTAB] [sc-total-bytes | ||||
HTAB] [sc-entity-bytes HTAB] [cs(insert_HTTP_header_name_here) | ||||
HTAB] [sc(insert_HTTP_header_name_here) HTAB] [s-ccid HTAB] | ||||
[s-sid HATB] [s-cached HTAB]) CRLF | ||||
RECGROUP = *RECLINE | RECGROUP = *RECLINE | |||
CDNILOGFILE = 1*(DIRGROUP RECGROUP) | CDNILOGFILE = 1*(DIRGROUP RECGROUP) | |||
See Section 3.4 for the definition of CDNILOGREC. | All directive names and field names defined in the logging file are | |||
case-insensitive as per the basic ABNF([RFC2234]). | ||||
3.3. CDNI Logging Directives | 3.3. CDNI Logging Directives | |||
The CDNI Logging directives are defined by the following rules: | A CDNI Logging directive line contains the directive name followed by | |||
":" HTAB and the directive value. | ||||
Directive names MUST be of the format NAMEFORMAT. All directive | ||||
names MUST be registered in the CDNI Logging Directives Names | ||||
registry. Unknown directives MUST be ignored. Directive values can | ||||
have various formats. All possible directive values for the record- | ||||
type "cdni_http_request_v1" are further detailed in this section. | ||||
The following example shows the structure of a directive and | ||||
enumerates strictly the directive values presently defined in the | ||||
record-type "cdni_http_request_v1." | ||||
directive = DIRNAME ":" HTAB DIRVAL | directive = DIRNAME ":" HTAB DIRVAL | |||
DIRNAME = NAMEFORMAT | DIRNAME = NAMEFORMAT | |||
DIRNAME = <any CDNI Logging Directive name registered in the CDNI | ||||
Logging Directive Names registry (Section 6.1)> | ||||
DIRVAL = <directive value, as specified by the document identified | DIRVAL = NHTABSTRING / QSTRING / host / USER-COMMENT / FIENAME * | |||
as Reference in the CDNI Logging Directive Names registry | (HTAB FIENAME) / 64HEXDIG | |||
(Section 6.1) for the corresponding DIRNAME> | ||||
An implementation of the CDNI Logging interface MUST support all of | An implementation of the CDNI Logging interface MUST support all of | |||
the following directives, listed below by their directive name: | the following directives, listed below by their directive name: | |||
o Version: | o version: | |||
* format: NHTABSTRING | * format: NHTABSTRING | |||
* directive value: indicates the version of the CDNI Logging File | * directive value: indicates the version of the CDNI Logging File | |||
format. The entity transmitting a CDNI Logging File as per the | format. The entity transmitting a CDNI Logging File as per the | |||
present document MUST set the value to "CDNI/1.0". In the | present document MUST set the value to "CDNI/1.0". In the | |||
future, other versions of CDNI Logging File might be specified; | future, other versions of CDNI Logging File might be specified; | |||
those would use a value different to "CDNI/1.0" allowing the | those would use a value different to "CDNI/1.0" allowing the | |||
entity receiving the CDNI Logging File to identify the | entity receiving the CDNI Logging File to identify the | |||
corresponding version. | corresponding version. | |||
* occurrence: there MUST be one and only one instance of this | * occurrence: there MUST be one and only one instance of this | |||
directive per CDNI Logging File. It MUST be the first line of | directive per CDNI Logging File. It MUST be the first line of | |||
the CDNI Logging File. | the CDNI Logging File. | |||
* example: "version: HTAB CDNI/1.0". | ||||
o UUID: | o UUID: | |||
* format: NHTABSTRING | * format: NHTABSTRING | |||
* directive value: this a Uniform Resource Name (URN) from the | * directive value: this a Uniform Resource Name (URN) from the | |||
Universally Unique IDentifier (UUID) URN namespace specified in | Universally Unique IDentifier (UUID) URN namespace specified in | |||
[RFC4122]). The UUID contained in the URN uniquely identifies | [RFC4122]). The UUID contained in the URN uniquely identifies | |||
the CDNI Logging File. | the CDNI Logging File. | |||
* occurrence: there MUST be one and only one instance of this | * occurrence: there MUST be one and only one instance of this | |||
directive per CDNI Logging File. | directive per CDNI Logging File. | |||
o Claimed-Origin: | * example: "UUID: HTAB NHTABSTRING". | |||
o claimed-origin: | ||||
* format: host | * format: host | |||
* directive value: this contains the claimed identification of | * directive value: this contains the claimed identification of | |||
the entity transmitting the CDNI Logging File (e.g., the host | the entity transmitting the CDNI Logging File (e.g., the host | |||
in a dCDN supporting the CDNI Logging interface) or the entity | in a dCDN supporting the CDNI Logging interface) or the entity | |||
responsible for transmitting the CDNI Logging File (e.g., the | responsible for transmitting the CDNI Logging File (e.g., the | |||
dCDN). | dCDN). | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
directive per CDNI Logging File. This directive MAY be | directive per CDNI Logging File. This directive MAY be | |||
included by the dCDN. It MUST NOT be included or modified by | included by the dCDN. It MUST NOT be included or modified by | |||
the uCDN. | the uCDN. | |||
o Established-Origin: | * example: "claimed-origin: HTAB host". | |||
o established-origin: | ||||
* format: host | * format: host | |||
* directive value: this contains the identification, as | * directive value: this contains the identification, as | |||
established by the entity receiving the CDNI Logging File, of | established by the entity receiving the CDNI Logging File, of | |||
the entity transmitting the CDNI Logging File (e.g., the host | the entity transmitting the CDNI Logging File (e.g., the host | |||
in a dCDN supporting the CDNI Logging interface) or the entity | in a dCDN supporting the CDNI Logging interface) or the entity | |||
responsible for transmitting the CDNI Logging File (e.g., the | responsible for transmitting the CDNI Logging File (e.g., the | |||
dCDN). | dCDN). | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
directive per CDNI Logging File. This directive MAY be added | directive per CDNI Logging File. This directive MAY be added | |||
by the uCDN (e.g., before storing the CDNI Logging File). It | by the uCDN (e.g., before storing the CDNI Logging File). It | |||
MUST NOT be included by the dCDN. The mechanisms used by the | MUST NOT be included by the dCDN. The mechanisms used by the | |||
uCDN to establish and validate the entity responsible for the | uCDN to establish and validate the entity responsible for the | |||
CDNI Logging File is outside the scope of the present document. | CDNI Logging File is outside the scope of the present document. | |||
We observe that, in particular, this may be achieved through | We observe that, in particular, this may be achieved through | |||
authentication mechanisms that are part of the transport layer | authentication mechanisms that are part of the transport layer | |||
of the CDNI Logging File pull mechanism (Section 4.2). | of the CDNI Logging File pull mechanism (Section 4.2). | |||
o Remark: | * ABNF example: "established-origin: HTAB host". | |||
* format: NHTABSTRING | o remark: | |||
* format: USER-COMMENT | ||||
* directive value: this contains comment information. Data | * directive value: this contains comment information. Data | |||
contained in this field is to be ignored by analysis tools. | contained in this field is to be ignored by analysis tools. | |||
* occurrence: there MAY be zero, one or any number of instance of | * occurrence: there MAY be zero, one or any number of instance of | |||
this directive per CDNI Logging File. | this directive per CDNI Logging File. | |||
o Record-Type: | * example: "remark: HTAB USER-COMMENT". | |||
o record-type: | ||||
* format: NAMEFORMAT | * format: NAMEFORMAT | |||
* directive value: indicates the type of the CDNI Logging Records | * directive value: indicates the type of the CDNI Logging Records | |||
that follow this directive, until another Record-Type directive | that follow this directive, until another record-type directive | |||
(or the end of the CDNI Logging File). This can be any CDNI | (or the end of the CDNI Logging File). This can be any CDNI | |||
Logging Record type registered in the CDNI Logging Record-types | Logging Record type registered in the CDNI Logging Record-types | |||
registry (Section 6.3). For example this may be | registry (Section 6.3). For example this may be | |||
"cdni_http_request_v1" as specified in Section 3.4.1. | "cdni_http_request_v1" as specified in Section 3.4.1. | |||
* occurrence: there MUST be at least one instance of this | * occurrence: there MUST be at least one instance of this | |||
directive per CDNI Logging File. The first instance of this | directive per CDNI Logging File. The first instance of this | |||
directive MUST precede a Fields directive and MUST precede all | directive MUST precede a fields directive and MUST precede all | |||
CDNI Logging Records. | CDNI Logging Records. | |||
o Fields: | * example: "record-type: HTAB cdni_http_request_v1". | |||
o fields: | ||||
* format: FIENAME *(HTAB FIENAME) ; where FIENAME can take any | * format: FIENAME *(HTAB FIENAME) ; where FIENAME can take any | |||
CDNI Logging field name registered in the CDNI Logging Field | CDNI Logging field name registered in the CDNI Logging Field | |||
Names registry (Section 6.4). | Names registry (Section 6.4). | |||
* directive value: this lists the names of all the fields for | * directive value: this lists the names of all the fields for | |||
which a value is to appear in the CDNI Logging Records that | which a value is to appear in the CDNI Logging Records that | |||
follow the instance of this directive (until another instance | follow the instance of this directive (until another instance | |||
of this directive). The names of the fields, as well as their | of this directive). The names of the fields, as well as their | |||
occurrences, MUST comply with the corresponding rules specified | occurrences, MUST comply with the corresponding rules specified | |||
in the document referenced in the CDNI Logging Record-types | in the document referenced in the CDNI Logging Record-types | |||
registry (Section 6.3) for the corresponding CDNI Logging | registry (Section 6.3) for the corresponding CDNI Logging | |||
Record-Type. | record-type. | |||
* occurrence: there MUST be at least one instance of this | * occurrence: there MUST be at least one instance of this | |||
directive per Record-Type directive. The first instance of | directive per record-type directive. The first instance of | |||
this directive for a given Record-Type MUST appear before any | this directive for a given record-type MUST appear before any | |||
CDNI Logging Record for this Record-Type. One situation where | CDNI Logging Record for this record-type. One situation where | |||
more than one instance of the Fields directive can appear | more than one instance of the fields directive can appear | |||
within a given CDNI Logging File, is when there is a change, in | within a given CDNI Logging File, is when there is a change, in | |||
the middle of a fairly large logging period, in the agreement | the middle of a fairly large logging period, in the agreement | |||
between the uCDN and the dCDN about the set of Fields that are | between the uCDN and the dCDN about the set of fields that are | |||
to be exchanged. The multiple occurrences allow records with | to be exchanged. The multiple occurrences allow records with | |||
the old set of fields and records with the new set of fields to | the old set of fields and records with the new set of fields to | |||
be carried inside the same Logging File. | be carried inside the same Logging File. | |||
o SHA256-Hash: | * example: "fields: HTAB FIENAME * (HTAB FIENAME)". | |||
* format: 32HEXDIG | o SHA256-hash: | |||
* format: 64HEXDIG | ||||
* directive value: This directive permits the detection of a | * directive value: This directive permits the detection of a | |||
corrupted CDNI Logging File. This can be useful, for instance, | corrupted CDNI Logging File. This can be useful, for instance, | |||
if a problem occurs on the filesystem of the dCDN Logging | if a problem occurs on the filesystem of the dCDN Logging | |||
system and leads to a truncation of a logging file. The valid | system and leads to a truncation of a logging file. The valid | |||
SHA256-Hash value is included in this directive by the entity | SHA256-hash value is included in this directive by the entity | |||
that transmits the CDNI Logging File. It MUST be computed by | that transmits the CDNI Logging File. It MUST be computed by | |||
applying the SHA-256 ([RFC6234]) cryptographic hash function on | applying the SHA-256 ([RFC6234]) cryptographic hash function on | |||
the CDNI Logging File, including all the directives and logging | the CDNI Logging File, including all the directives and logging | |||
records, up to the SHA256-Hash directive itself, excluding the | records, up to the SHA256-hash directive itself, excluding the | |||
SHA256-Hash directive itself. The SHA256-Hash value MUST be | SHA256-hash directive itself. The SHA256-hash value MUST be | |||
represented as a US-ASCII encoded hexadecimal number, 64 digits | represented as a US-ASCII encoded hexadecimal number, 64 digits | |||
long (representing a 256 bit hash value). The entity receiving | long (representing a 256 bit hash value). The entity receiving | |||
the CDNI Logging File also computes in a similar way the | the CDNI Logging File also computes in a similar way the | |||
SHA-256 hash on the received CDNI Logging File and compares | SHA-256 hash on the received CDNI Logging File and compares | |||
this hash to the value of the SHA256-Hash directive. If the | this hash to the value of the SHA256-hash directive. If the | |||
two values are equal, then the received CDNI Logging File is to | two values are equal, then the received CDNI Logging File is to | |||
be considered non-corrupted. If the two values are different, | be considered non-corrupted. If the two values are different, | |||
the received CDNI Logging File is to be considered corrupted. | the received CDNI Logging File is to be considered corrupted. | |||
The behavior of the entity that received a corrupted CDNI | The behavior of the entity that received a corrupted CDNI | |||
Logging File is outside the scope of this specification; we | Logging File is outside the scope of this specification; we | |||
note that the entity MAY attempt to pull again the same CDNI | note that the entity MAY attempt to pull again the same CDNI | |||
Logging File from the transmitting entity. If the entity | Logging File from the transmitting entity. If the entity | |||
receiving a non-corrupted CDNI Logging File adds an | receiving a non-corrupted CDNI Logging File adds an | |||
Established-Origin directive, it MUST then recompute and update | established-origin directive, it MUST then recompute and update | |||
the SHA256-Hash directive so it also protects the added | the SHA256-hash directive so it also protects the added | |||
Established-Origin directive. | established-origin directive. | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
directive. There SHOULD be exactly one instance of this | directive. There SHOULD be exactly one instance of this | |||
directive. One situation where that directive could be omitted | directive. One situation where that directive could be omitted | |||
is where integrity protection is already provided via another | is where integrity protection is already provided via another | |||
mechanism (for example if an integrity hash is associated to | mechanism (for example if an integrity hash is associated to | |||
the CDNI Logging File out of band through the CDNI Logging Feed | the CDNI Logging File out of band through the CDNI Logging Feed | |||
( Section 4.1) leveraging ATOM extensions such as those | ( Section 4.1) leveraging ATOM extensions such as those | |||
proposed in [I-D.snell-atompub-link-extensions]. When present, | proposed in [I-D.snell-atompub-link-extensions]. When present, | |||
the SHA256-Hash field MUST be the last line of the CDNI Logging | the SHA256-hash field MUST be the last line of the CDNI Logging | |||
File. | File. | |||
* example: "SHA256-hash: HTAB 64HEXDIG". | ||||
An uCDN-side implementation of the CDNI Logging interface MUST reject | An uCDN-side implementation of the CDNI Logging interface MUST reject | |||
a CDNI Logging File that does not comply with the occurences | a CDNI Logging File that does not comply with the occurrences | |||
specified above for each and every directive. For example, an uCDN- | specified above for each and every directive. For example, an uCDN- | |||
side implementation of the CDNI Logging interface receiving a CDNI | side implementation of the CDNI Logging interface receiving a CDNI | |||
Logging file with zero occurence of the Version directive, or with | Logging file with zero occurrence of the version directive, or with | |||
two occurences of the SHA256-Hash, MUST reject this CDNI Logging | two occurrences of the SHA256-hash, MUST reject this CDNI Logging | |||
File. | File. | |||
An entity receiving a CDNI Logging File with a value set to | An entity receiving a CDNI Logging File with a value set to | |||
"CDNI/1.0" MUST process the CDNI Logging File as per the present | "CDNI/1.0" MUST process the CDNI Logging File as per the present | |||
document. An entity receiving a CDNI Logging File with a value set | document. An entity receiving a CDNI Logging File with a value set | |||
to a different value MUST process the CDNI Logging File as per the | to a different value MUST process the CDNI Logging File as per the | |||
specification referenced in the CDNI Logging File Version registry | specification referenced in the CDNI Logging File version registry | |||
(see Section 6.1) if the implementation supports this specification | (see Section 6.1) if the implementation supports this specification | |||
and MUST reject the CDNI Logging File otherwise. | and MUST reject the CDNI Logging File otherwise. | |||
3.4. CDNI Logging Records | 3.4. CDNI Logging Records | |||
A CDNI Logging Record consists of a sequence of CDNI Logging Fields | A CDNI Logging Record consists of a sequence of CDNI Logging fields | |||
relating to that single CDNI Logging Record. | relating to that single CDNI Logging Record. | |||
CDNI Logging Fields MUST be separated by the "horizontal tabulation | CDNI Logging fields MUST be separated by the "horizontal tabulation | |||
(HTAB)" character. [Editor's Note: This needs editing to explain | (HTAB)" character. | |||
explain how CRLF/HTAB inside a QSTRING does not act as a separator. | ||||
] | ||||
To facilitate readability, a prefix scheme is used for CDNI Logging | To facilitate readability, a prefix scheme is used for CDNI Logging | |||
field names in a similar way to the one used in W3C Extended Log File | field names in a similar way to the one used in W3C Extended Log File | |||
Format [ELF]. The semantics of the prefix in the present document | Format [ELF]. The semantics of the prefix in the present document | |||
is: | is: | |||
o "c-" refers to the User Agent that issues the request (corresponds | o "c-" refers to the User Agent that issues the request (corresponds | |||
to the "client" of W3C Extended Log Format) | to the "client" of W3C Extended Log Format) | |||
o "d-" refers to the dCDN (relative to a given CDN acting as a uCDN) | o "d-" refers to the dCDN (relative to a given CDN acting as a uCDN) | |||
skipping to change at page 24, line 35 | skipping to change at line 1106 | |||
o "cs-" refers to communication from the User Agent towards the dCDN | o "cs-" refers to communication from the User Agent towards the dCDN | |||
Surrogate | Surrogate | |||
o "sc-" refers to communication from the dCDN Surrogate towards the | o "sc-" refers to communication from the dCDN Surrogate towards the | |||
User Agent | User Agent | |||
An implementation of the CDNI Logging interface as per the present | An implementation of the CDNI Logging interface as per the present | |||
specification MUST support the CDNI HTTP Request Logging Record as | specification MUST support the CDNI HTTP Request Logging Record as | |||
specified in Section 3.4.1. | specified in Section 3.4.1. | |||
A CDNI Logging Record (CDNILOGREC) is defined by the following rules: | A CDNI Logging Record contains the corresponding values for the | |||
fields that are enumerated in the last fields directive before the | ||||
CDNILOGREC = FIEVAL *(HTAB FIEVAL) | current log line. Note that the order in which the field values | |||
appear is dictated by the order of the fields names in the fields | ||||
FIEVAL = <CDNI Logging field value corresponding to the CDNI | directive. There SHOULD be no dependency between the various fields | |||
Logging field names (FIENAME) listed is the last Fields directive | values. | |||
preceding the present CDNI Logging Record.> | ||||
3.4.1. HTTP Request Logging Record | 3.4.1. HTTP Request Logging Record | |||
This section defines the CDNI Logging Record of Record-Type | This section defines the CDNI Logging Record of record-type | |||
"cdni_http_request_v1". It is applicable to content delivery | "cdni_http_request_v1". It is applicable to content delivery | |||
performed by the dCDN using HTTP/1.0([RFC1945]), | performed by the dCDN using HTTP/1.0([RFC1945]), | |||
HTTP/1.1([RFC7230],[RFC7231], [RFC7232], [RFC7233], [RFC7234], | HTTP/1.1([RFC7230],[RFC7231], [RFC7232], [RFC7233], [RFC7234], | |||
[RFC7235]) or HTTPS ([RFC2818], [RFC7230]). We observe that, in the | [RFC7235]) or HTTPS ([RFC2818], [RFC7230]). We observe that, in the | |||
case of HTTPS delivery, there may be value in logging additional | case of HTTPS delivery, there may be value in logging additional | |||
information specific to the operation of HTTP over TLS and we note | information specific to the operation of HTTP over TLS and we note | |||
that this is outside the scope of the present document and may be | that this is outside the scope of the present document and may be | |||
addressed in a future document defining another CDNI Logging Record | addressed in a future document defining another CDNI Logging Record | |||
or another version of the HTTP Request Logging Record. | or another version of the HTTP Request Logging Record. | |||
The "cdni_http_request_v1" Record-Type is also expected to be | The "cdni_http_request_v1" record-type is also expected to be | |||
applicable to HTTP/2 [I-D.ietf-httpbis-http2] (which is still under | applicable to HTTP/2 [RFC7540] since a fundamental design tenet of | |||
development at the time of writing the present document) since a | HTTP/2 is to preserve the HTTP/1.1 semantics. We observe that, in | |||
fundamental design tenet of HTTP/2 is to preserve the HTTP/1.1 | the case of HTTP/2 delivery, there may be value in logging additional | |||
semantics. We observe that, in the case of HTTP/2 delivery, there | information specific to the additional functionality of HTTP/2 (e.g. | |||
may be value in logging additional information specific to the | information related to connection identification, to stream | |||
additional functionality of HTTP/2 (e.g. information related to | identification, to stream priority and to flow control). We note | |||
connection identification, to stream identification, to stream | that such additional information is outside the scope of the present | |||
priority and to flow control). We note that such additional | document and may be addressed in a future document defining another | |||
information is outside the scope of the present document and may be | CDNI Logging Record or another version of the HTTP Request Logging | |||
addressed in a future document defining another CDNI Logging Record | Record. | |||
or another version of the HTTP Request Logging Record. | ||||
The "cdni_http_request_v1" Record-Type contains the following CDNI | The "cdni_http_request_v1" record-type contains the following CDNI | |||
Logging Fields, listed by their field name: | Logging fields, listed by their field name: | |||
o date: | o date: | |||
* format: DATE | * format: DATE | |||
* field value: the date at which the processing of request | * field value: the date at which the processing of request | |||
completed on the Surrogate. | completed on the Surrogate. | |||
* occurrence: there MUST be one and only one instance of this | * occurrence: there MUST be one and only one instance of this | |||
field. | field. | |||
skipping to change at page 26, line 22 | skipping to change at line 1187 | |||
* field value: the source IPv4 or IPv6 address (i.e., the | * field value: the source IPv4 or IPv6 address (i.e., the | |||
"client" address) in the request received by the Surrogate. | "client" address) in the request received by the Surrogate. | |||
* occurrence: there MUST be one and only one instance of this | * occurrence: there MUST be one and only one instance of this | |||
field. | field. | |||
o c-ip-anonymizing: | o c-ip-anonymizing: | |||
* format: 1*DIGIT | * format: 1*DIGIT | |||
* field value: the number of rightmost bits of the IPv4 address | * field value: the number of rightmost bits of the address in the | |||
in the c-ip field that are zeroed-out in order to anonymize the | c-ip field that are zeroed-out in order to anonymize the | |||
logging record. The mechanism by which the two ends of the | logging record. The mechanism by which the two ends of the | |||
CDNI Logging interface agree on whether anonymization is to be | CDNI Logging interface agree on whether anonymization is to be | |||
supported and the number of bits that need to be zeroed-out for | supported and the number of bits that need to be zeroed-out for | |||
this purpose are outside the scope of the present document. | this purpose are outside the scope of the present document. | |||
IPv4 addresses SHOULD be anonymized to /24 boundary (i.e., with | IPv4 addresses SHOULD be anonymized to /24 boundary (i.e., with | |||
c-ip-anonymizing set to 8), and IPv6 addresses SHOULD be | c-ip-anonymizing set to 8), and IPv6 addresses SHOULD be | |||
anonymized to a /48 boundary (i.e., with c-ip-anonymizing set | anonymized to a /48 boundary (i.e., with c-ip-anonymizing set | |||
to 80). | to 80). | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
skipping to change at page 29, line 39 | skipping to change at line 1349 | |||
* format: 1*DIGIT | * format: 1*DIGIT | |||
* field value: this is the number of bytes of the message-body in | * field value: this is the number of bytes of the message-body in | |||
the HTTP response sent by the Surrogate in response to the | the HTTP response sent by the Surrogate in response to the | |||
request. This does not include the bytes of the Status-Line or | request. This does not include the bytes of the Status-Line or | |||
the bytes of the HTTP headers. | the bytes of the HTTP headers. | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
field. | field. | |||
o cs(<HTTP-header-name>): | o cs(insert_HTTP_header_name_here): | |||
* format: QSTRING | * format: QSTRING | |||
* field value: the value of the HTTP header (identified by the | * field value: the value of the HTTP header (identified by the | |||
<HTTP-header-name> in the CDNI Logging field name) as it | insert_HTTP_header_name_here in the CDNI Logging field name) as | |||
appears in the request processed by the Surrogate, but | it appears in the request processed by the Surrogate, but | |||
prepended by a DQUOTE and appended by a DQUOTE. For example, | prepended by a DQUOTE and appended by a DQUOTE. For example, | |||
when the CDNI Logging field name (FIENAME) listed in the | when the CDNI Logging field name (FIENAME) listed in the | |||
preceding Fields directive is cs(User-Agent), this CDNI Logging | preceding fields directive is cs(User-Agent), this CDNI Logging | |||
field value contains the value of the User-Agent HTTP header as | field value contains the value of the User-Agent HTTP header as | |||
received by the Surrogate in the request it processed, but | received by the Surrogate in the request it processed, but | |||
prepended by a DQUOTE and appended by a DQUOTE. If the HTTP | prepended by a DQUOTE and appended by a DQUOTE. If the HTTP | |||
header as it appeared in the request processed by the Surrogate | header as it appeared in the request processed by the Surrogate | |||
contains one or more DQUOTE, each DQUOTE MUST be escaped by an | contains one or more DQUOTE, each DQUOTE MUST be escaped with | |||
additional DQUOTE. For example, if the HTTP header contains | percent encoding. For example, if the HTTP header contains | |||
My_Header"value", then the field value of the cs(<HTTP-header- | My_Header"value", then the field value of the | |||
name>) is "My_Header""value""". The entity transmitting the | cs(insert_HTTP_header_name_here) is "My_Header%x22value%x22". | |||
CDNI Logging File MUST ensure that the <HTTP-header-name> of | The entity transmitting the CDNI Logging File MUST ensure that | |||
the cs(<HTTP-header-name) listed in the Fields directive comply | the respective insert_HTTP_header_name_here of the | |||
with HTTP specifications and, in particular, does not include | cs(insert_HTTP_header_name_here) listed in the fields directive | |||
any HTAB, since this would prevent proper parsing of the Fields | comply with HTTP specifications. In particular, this field | |||
directive by the entity receiving the CDNI Logging File. | name does not include any HTAB, since this would prevent proper | |||
parsing of the fields directive by the entity receiving the | ||||
CDNI Logging File. | ||||
* occurrence: there MAY be zero, one or any number of instance of | * occurrence: there MAY be zero, one or any number of instance of | |||
this field. | this field. | |||
o sc(<HTTP-header-name>): | o sc(insert_HTTP_header_name_here): | |||
* format: QSTRING | * format: QSTRING | |||
* field value: the value of the HTTP header (identified by the | * field value: the value of the HTTP header (identified by the | |||
<HTTP-header-name> in the CDNI Logging field name) as it | insert_HTTP_header_name_here in the CDNI Logging field name) as | |||
appears in the response issued by the Surrogate to serve the | it appears in the response issued by the Surrogate to serve the | |||
request, but prepended by a DQUOTE and appended by a DQUOTE. | request, but prepended by a DQUOTE and appended by a DQUOTE. | |||
If the HTTP header as it appeared in the request processed by | If the HTTP header as it appeared in the request processed by | |||
the Surrogate contains one or more DQUOTE, each DQUOTE MUST be | the Surrogate contains one or more DQUOTE, each DQUOTE MUST be | |||
escaped by an additional DQUOTE. For example, if the HTTP | escaped with percent encoding. For example, if the HTTP header | |||
header contains My_Header"value", then the field value of the | contains My_Header"value", then the field value of the | |||
cs(<HTTP-header-name>) is "My_Header""value""". The entity | sc(insert_HTTP_header_name_here) is "My_Header%x22value%x22". | |||
transmitting the CDNI Logging File MUST ensure that the <HTTP- | The entity transmitting the CDNI Logging File MUST ensure that | |||
header-name> of the cs(<HTTP-header-name) listed in the Fields | the respective insert_HTTP_header_name_here of the | |||
directive comply with HTTP specifications and, in particular, | cs(insert_HTTP_header_name_here) listed in the fields directive | |||
does not include any HTAB, since this would prevent proper | comply with HTTP specifications. In particular, this field | |||
parsing of the Fields directive by the entity receiving the | name does not include any HTAB, since this would prevent proper | |||
parsing of the fields directive by the entity receiving the | ||||
CDNI Logging File. | CDNI Logging File. | |||
* occurrence: there MAY be zero, one or any number of instances | * occurrence: there MAY be zero, one or any number of instances | |||
of this field. For a given <HTTP-header-name>, there MUST be | of this field. For a given insert_HTTP_header_name_here, there | |||
zero or exactly one instance of this field. | MUST be zero or exactly one instance of this field. | |||
o s-ccid: | o s-ccid: | |||
* format: QSTRING | * format: QSTRING | |||
* field value: this contains the value of the Content Collection | * field value: this contains the value of the Content Collection | |||
IDentifier (CCID) associated by the uCDN to the content served | IDentifier (CCID) associated by the uCDN to the content served | |||
by the Surrogate via the CDNI Metadata interface | by the Surrogate via the CDNI Metadata interface | |||
([I-D.ietf-cdni-metadata]), prepended by a DQUOTE and appended | ([I-D.ietf-cdni-metadata]), prepended by a DQUOTE and appended | |||
by a DQUOTE. If the CCID conveyed in the CDNI Metadata | by a DQUOTE. If the CCID conveyed in the CDNI Metadata | |||
interface contains one or more DQUOTE, each DQUOTE MUST be | interface contains one or more DQUOTE, each DQUOTE MUST be | |||
escaped by an additional DQUOTE. For example, if the CCID | escaped with percent encoding. For example, if the CCID | |||
conveyed in the CDNI Metadata interface is My_CCIDD"value", | conveyed in the CDNI Metadata interface is My_CCIDD"value", | |||
then the field value of the s-ccid is "My_CCID""value""". | then the field value of the s-ccid is "My_CCID%x22value%X22". | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
field. For a given <HTTP-header-name>, there MUST be zero or | field. For a given insert_HTTP_header_name_here, there MUST be | |||
exactly one instance of this field. | zero or exactly one instance of this field. | |||
o s-sid: | o s-sid: | |||
* format: QSTRING | * format: QSTRING | |||
* field value: this contains the value of a Session IDentifier | * field value: this contains the value of a Session IDentifier | |||
(SID) generated by the dCDN for a specific HTTP session, | (SID) generated by the dCDN for a specific HTTP session, | |||
prepended by a DQUOTE and appended by a DQUOTE. In particular, | prepended by a DQUOTE and appended by a DQUOTE. In particular, | |||
for HTTP Adaptive Streaming (HAS) session, the Session | for HTTP Adaptive Streaming (HAS) session, the Session | |||
IDentifier value is included in the Logging record for every | IDentifier value is included in the Logging record for every | |||
content chunk delivery of that session in view of facilitating | content chunk delivery of that session in view of facilitating | |||
the later correlation of all the per content chunk log records | the later correlation of all the per content chunk log records | |||
of a given HAS session. See section 3.4.2.2. of [RFC6983] for | of a given HAS session. See section 3.4.2.2. of [RFC6983] for | |||
more discussion on the concept of Session IDentifier in the | more discussion on the concept of Session IDentifier in the | |||
context of HAS. If the SID conveyed contains one or more | context of HAS. If the SID conveyed contains one or more | |||
DQUOTE, each DQUOTE MUST be escaped by an additional DQUOTE. | DQUOTE, each DQUOTE MUST be escaped with percent encoding. For | |||
For example, if the SID is My_SID"value", then the field value | example, if the SID is My_SID"value", then the field value of | |||
of the s-sid is "My_SID""value""". | the s-sid is "My_SID%x22value%x22". | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
field. | field. | |||
o s-cached: | o s-cached: | |||
* format: 1DIGIT | * format: 1DIGIT | |||
* field value: this characterises whether the Surrogate served | * field value: this characterises whether the Surrogate served | |||
the request using content already stored on its local cache or | the request using content already stored on its local cache or | |||
skipping to change at page 32, line 5 | skipping to change at line 1461 | |||
be used otherwise (including cases where the Surrogate served | be used otherwise (including cases where the Surrogate served | |||
the request using some, but not all, content already stored on | the request using some, but not all, content already stored on | |||
its local cache). Note that a "0" only means a cache miss in | its local cache). Note that a "0" only means a cache miss in | |||
the Surrogate and does not provide any information on whether | the Surrogate and does not provide any information on whether | |||
the content was already stored, or not, in another device of | the content was already stored, or not, in another device of | |||
the dCDN, i.e., whether this was a "dCDN hit" or "dCDN miss". | the dCDN, i.e., whether this was a "dCDN hit" or "dCDN miss". | |||
* occurrence: there MUST be zero or exactly one instance of this | * occurrence: there MUST be zero or exactly one instance of this | |||
field. | field. | |||
The "Fields" directive corresponding to a HTTP Request Logging Record | The "fields" directive corresponding to a HTTP Request Logging Record | |||
MUST contain all the fields names whose occurrence is specified above | MUST contain all the fields names whose occurrence is specified above | |||
as "There MUST be one and only one instance of this field". The | as "There MUST be one and only one instance of this field". The | |||
corresponding fields value MUST be present in every HTTP Request | corresponding fields value MUST be present in every HTTP Request | |||
Logging Record. | Logging Record. | |||
The "Fields" directive corresponding to a HTTP Request Logging Record | The "fields" directive corresponding to a HTTP Request Logging Record | |||
MAY list all the fields value whose occurrence is specified above as | MAY list all the fields value whose occurrence is specified above as | |||
"there MUST be zero or exactly one instance of this field" or "there | "there MUST be zero or exactly one instance of this field" or "there | |||
MAY be zero, one or any number of instances of this field". The set | MAY be zero, one or any number of instances of this field". The set | |||
of such field names actually listed in the "Fields" directive is | of such field names actually listed in the "fields" directive is | |||
selected by the CDN generating the CDNI Logging File based on | selected by the CDN generating the CDNI Logging File based on | |||
agreements between the interconnected CDNs established through | agreements between the interconnected CDNs established through | |||
mechanisms outside the scope of this specification (e.g., contractual | mechanisms outside the scope of this specification (e.g., contractual | |||
agreements). When such a field name is not listed in the "Fields" | agreements). When such a field name is not listed in the "fields" | |||
directive, the corresponding field value MUST NOT be included in the | directive, the corresponding field value MUST NOT be included in the | |||
Logging Record. When such a field name is listed in the "Fields" | Logging Record. When such a field name is listed in the "fields" | |||
directive, the corresponding field value MUST be included in the | directive, the corresponding field value MUST be included in the | |||
Logging Record; if the value for the field is not available, this | Logging Record; if the value for the field is not available, this | |||
MUST be conveyed via a dash character ("-"). | MUST be conveyed via a dash character ("-"). | |||
The fields names listed in the "Fields" directive MAY be listed in | The fields names listed in the "fields" directive MAY be listed in | |||
the order in which they are listed in Section 3.4.1 or MAY be listed | the order in which they are listed in Section 3.4.1 or MAY be listed | |||
in any other order. | in any other order. | |||
A dCDN-side implementation of the CDNI Logging interface MUST | A dCDN-side implementation of the CDNI Logging interface MUST | |||
implement all the following Logging Fields in a CDNI Logging Record | implement all the following Logging fields in a CDNI Logging Record | |||
of Record-Type "cdni_http_request_v1", and MUST support the ability | of record-type "cdni_http_request_v1", and MUST support the ability | |||
to include valid values for each of them: | to include valid values for each of them: | |||
o date | o date | |||
o time | o time | |||
o time-taken | o time-taken | |||
o c-ip | o c-ip | |||
skipping to change at page 33, line 20 | skipping to change at line 1525 | |||
o u-uri | o u-uri | |||
o protocol | o protocol | |||
o sc-status | o sc-status | |||
o sc-total-bytes | o sc-total-bytes | |||
o sc-entity-bytes | o sc-entity-bytes | |||
o cs(<HTTP-header>) | o cs(insert_HTTP_header_name_here) | |||
o sc(<HTTP-header>) | o sc(insert_HTTP_header_name_here) | |||
o s-cached | o s-cached | |||
A dCDN-side implementation of the CDNI Logging interface MAY support | A dCDN-side implementation of the CDNI Logging interface MAY support | |||
the following Logging Fields in a CDNI Logging Record of Record-Type | the following Logging fields in a CDNI Logging Record of record-type | |||
"cdni_http_request_v1": | "cdni_http_request_v1": | |||
o s-ccid | o s-ccid | |||
o s-sid | o s-sid | |||
If a dCDN-side implementation of the CDNI Logging interface supports | If a dCDN-side implementation of the CDNI Logging interface supports | |||
these Fields, it MUST support the ability to include valid values for | these fields, it MUST support the ability to include valid values for | |||
them. | them. | |||
An uCDN-side implementation of the CDNI Logging interface MUST be | An uCDN-side implementation of the CDNI Logging interface MUST be | |||
able to accept CDNI Logging Files with CDNI Logging Records of | able to accept CDNI Logging Files with CDNI Logging Records of | |||
Record-Type "cdni_http_request_v1" containing any CDNI Logging Field | record-type "cdni_http_request_v1" containing any CDNI Logging Field | |||
defined in Section 3.4.1 as long as the CDNI Logging Record and the | defined in Section 3.4.1 as long as the CDNI Logging Record and the | |||
CDNI Logging File are compliant with the present document. | CDNI Logging File are compliant with the present document. | |||
In case, an uCDN-side implementation of the CDNI Logging interface | In case, an uCDN-side implementation of the CDNI Logging interface | |||
receives a CDNI Logging File with HTTP Request Logging Records that | receives a CDNI Logging File with HTTP Request Logging Records that | |||
do not contain field values for exactly the set of field names | do not contain field values for exactly the set of field names | |||
actually listed in the preceding "Fields" directive, the | actually listed in the preceding "fields" directive, the | |||
implementation MUST reject those HTTP Request Logging Records, and | implementation MUST reject those HTTP Request Logging Records, and | |||
MUST accept the other HTTP Request Logging Records . | MUST accept the other HTTP Request Logging Records. | |||
To ensure that the logging file is correct, the text MUST be | ||||
sanitized before being logged. Null, bare CR, bare LF and HTAB have | ||||
to be removed by escaping them through percent encoding to avoid | ||||
confusion with the logging record separators. | ||||
3.5. CDNI Logging File Example | 3.5. CDNI Logging File Example | |||
Let us consider the upstream CDN and the downstream CDN labelled uCDN | Let us consider the upstream CDN and the downstream CDN labelled uCDN | |||
and dCDN-1 in Figure 1. When dCDN-1 acts as a downstream CDN for | and dCDN-1 in Figure 1. When dCDN-1 acts as a downstream CDN for | |||
uCDN and performs content delivery on behalf of uCDN, dCDN-1 will | uCDN and performs content delivery on behalf of uCDN, dCDN-1 will | |||
include the CDNI Logging Records corresponding to the content | include the CDNI Logging Records corresponding to the content | |||
deliveries performed on behalf of uCDN in the CDNI Logging Files for | deliveries performed on behalf of uCDN in the CDNI Logging Files for | |||
uCDN. An example CDNI Logging File communicated by dCDN-1 to uCDN is | uCDN. An example CDNI Logging File communicated by dCDN-1 to uCDN is | |||
shown below in Figure 4. | shown below in Figure 4. | |||
#Version:<HTAB>CDNI/1.0<CRLF> | #version:<HTAB>cdni/1.0<CRLF> | |||
#UUID:<HTAB>urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6<CRLF> | #UUID:<HTAB>urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6<CRLF> | |||
#Claimed-Origin:<HTAB>cdni-logging-entity.dcdn-1.example.com<CRLF> | #claimed-origin:<HTAB>cdni-logging-entity.dcdn-1.example.com<CRLF> | |||
#Record-Type:<HTAB>cdni_http_request_v1<CRLF> | #record-type:<HTAB>cdni_http_request_v1<CRLF> | |||
#Fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | #fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | |||
c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | |||
sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | |||
cs(Referer)<HTAB>s-cached<CRLF> | cs(Referer)<HTAB>s-cached<CRLF> | |||
2013-05-17<HTAB>00:38:06.825<HTAB>9.058<HTAB>10.5.7.0<HTAB>8<HTAB>GET<HTAB> | 2013-05-17<HTAB>00:38:06.825<HTAB>9.058<HTAB>10.5.7.0<HTAB>8<HTAB>GET<HTAB> | |||
http://cdni-ucdn.dcdn-1.example.com/video/movie100.mp4<HTAB> | http://cdni-ucdn.dcdn-1.example.com/video/movie100.mp4<HTAB> | |||
HTTP/1.1<HTAB>200<HTAB>6729891<HTAB>"Mozilla/5.0 | HTTP/1.1<HTAB>200<HTAB>6729891<HTAB>"Mozilla/5.0 | |||
(Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | |||
Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | |||
"host1.example.com"<HTAB>1<CRLF> | "host1.example.com"<HTAB>1<CRLF> | |||
skipping to change at page 34, line 49 | skipping to change at line 1605 | |||
Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | |||
"host1.example.com"<HTAB>1<CRLF> | "host1.example.com"<HTAB>1<CRLF> | |||
2013-05-17<HTAB>00:42:53.437<HTAB>52.879<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | 2013-05-17<HTAB>00:42:53.437<HTAB>52.879<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | |||
http://cdni-ucdn.dcdn-1.example.com/video/picture11.mp4<HTAB> | http://cdni-ucdn.dcdn-1.example.com/video/picture11.mp4<HTAB> | |||
HTTP/1.0<HTAB>200<HTAB>97234724<HTAB>"Mozilla/5.0 | HTTP/1.0<HTAB>200<HTAB>97234724<HTAB>"Mozilla/5.0 | |||
(Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | |||
Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari/533.4"<HTAB> | |||
"host5.example.com"<HTAB>0<CRLF> | "host5.example.com"<HTAB>0<CRLF> | |||
#SHA256-Hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | #SHA256-hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | |||
Figure 4: CDNI Logging File Example | Figure 4: CDNI Logging File Example | |||
If uCDN establishes by some means (e.g. via TLS authentication when | If uCDN establishes by some means (e.g. via TLS authentication when | |||
pulling the CDNI Logging File) the identity of the entity from which | pulling the CDNI Logging File) the identity of the entity from which | |||
it pulled the CDNI Logging File, uCDN can add to the CDNI Logging an | it pulled the CDNI Logging File, uCDN can add to the CDNI Logging an | |||
Established-Origin directive as illustrated below: | established-origin directive as illustrated below: | |||
#Established-Origin:<HTAB>cdni-logging-entity.dcdn- | #established-origin:<HTAB>cdni-logging-entity.dcdn- | |||
1.example.com<CRLF> | 1.example.com<CRLF> | |||
As illustrated in Figure 2, uCDN will then ingest the corresponding | As illustrated in Figure 2, uCDN will then ingest the corresponding | |||
CDNI Logging Records into its Collection process, alongside the | CDNI Logging Records into its Collection process, alongside the | |||
Logging Records generated locally by the uCDN itself. This allows | Logging Records generated locally by the uCDN itself. This allows | |||
uCDN to aggregate Logging Records for deliveries performed by itself | uCDN to aggregate Logging Records for deliveries performed by itself | |||
(through Records generated locally) as well as for deliveries | (through Records generated locally) as well as for deliveries | |||
performed by its downstream CDN(s). This aggregate information can | performed by its downstream CDN(s). This aggregate information can | |||
then be used (after Filtering and Rectification, as illustrated in | then be used (after Filtering and Rectification, as illustrated in | |||
Figure 2) by Log Consuming Applications that take into account | Figure 2) by Log Consuming Applications that take into account | |||
skipping to change at page 36, line 4 | skipping to change at line 1656 | |||
generated in the dCDN for deliveries in the hour before last. | generated in the dCDN for deliveries in the hour before last. | |||
3.6. Cascaded CDNI Logging Files Example | 3.6. Cascaded CDNI Logging Files Example | |||
Let us consider the cascaded CDN scenario of uCDN, dCDN-2 and dCDN-3 | Let us consider the cascaded CDN scenario of uCDN, dCDN-2 and dCDN-3 | |||
as depicted in Figure 1. After completion of a delivery by dCDN-3 on | as depicted in Figure 1. After completion of a delivery by dCDN-3 on | |||
behalf of dCDN-2, dCDN-3 will include a corresponding Logging Record | behalf of dCDN-2, dCDN-3 will include a corresponding Logging Record | |||
in a CDNI Logging File that will be pulled by dCDN-2 and that is | in a CDNI Logging File that will be pulled by dCDN-2 and that is | |||
illustrated below in Figure 5. In practice, a CDNI Logging File is | illustrated below in Figure 5. In practice, a CDNI Logging File is | |||
likely to contain a very high number of CDNI Logging Records. | likely to contain a very high number of CDNI Logging Records. | |||
However, for readability, the example in Figure 5 contains a single | However, for readability, the example in Figure 5 contains a single | |||
CDNI Logging Record. | CDNI Logging Record. | |||
#Version:<HTAB>CDNI/1.0<CRLF> | #version:<HTAB>CDNI/1.0<CRLF> | |||
#UUID:<HTAB>urn:uuid:65718ef-0123-9876-adce4321bcde<CRLF> | #UUID:<HTAB>urn:uuid:65718ef-0123-9876-adce4321bcde<CRLF> | |||
#Claimed-Origin:<HTAB>cdni-logging-entity.dcdn-3.example.com<CRLF> | #claimed-origin:<HTAB>cdni-logging-entity.dcdn-3.example.com<CRLF> | |||
#Record-Type:<HTAB>cdni_http_request_v1<CRLF> | #record-type:<HTAB>cdni_http_request_v1<CRLF> | |||
#Fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | #fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | |||
c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | |||
sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | |||
cs(Referer)<HTAB>s-cached<CRLF> | cs(Referer)<HTAB>s-cached<CRLF> | |||
2013-05-17<HTAB>00:39:09.119<HTAB>14.07<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | 2013-05-17<HTAB>00:39:09.119<HTAB>14.07<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | |||
http://cdni-dcdn-2.dcdn-3.example.com/video/movie118.mp4<HTAB> | http://cdni-dcdn-2.dcdn-3.example.com/video/movie118.mp4<HTAB> | |||
HTTP/1.1<HTAB>200<HTAB>15799210<HTAB>"Mozilla/5.0 | HTTP/1.1<HTAB>200<HTAB>15799210<HTAB>"Mozilla/5.0 | |||
(Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | |||
Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | |||
"host1.example.com"<HTAB>1<CRLF> | "host1.example.com"<HTAB>1<CRLF> | |||
#SHA256-Hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | #SHA256-hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | |||
Figure 5: Cascaded CDNI Logging File Example (dCDN-3 to dCDN-2) | Figure 5: Cascaded CDNI Logging File Example (dCDN-3 to dCDN-2) | |||
If dCDN-2 establishes by some means (e.g. via TLS authentication when | If dCDN-2 establishes by some means (e.g. via TLS authentication when | |||
pulling the CDNI Logging File) the identity of the entity from which | pulling the CDNI Logging File) the identity of the entity from which | |||
it pulled the CDNI Logging File, dCDN-2 can add to the CDNI Logging | it pulled the CDNI Logging File, dCDN-2 can add to the CDNI Logging | |||
an Established-Origin directive as illustrated below: | an established-origin directive as illustrated below: | |||
#Established-Origin:<HTAB>cdni-logging-entity.dcdn- | #established-origin:<HTAB>cdni-logging-entity.dcdn- | |||
3.example.com<CRLF> | 3.example.com<CRLF> | |||
dCDN-2 (behaving as an upstream CDN from the viewpoint of dCDN-3) | dCDN-2 (behaving as an upstream CDN from the viewpoint of dCDN-3) | |||
will then ingest the CDNI Logging Record for the considered dCDN-3 | will then ingest the CDNI Logging Record for the considered dCDN-3 | |||
delivery into its Collection process (as illustrated in Figure 2). | delivery into its Collection process (as illustrated in Figure 2). | |||
This Logging Record may be aggregated with Logging Records generated | This Logging Record may be aggregated with Logging Records generated | |||
locally by dCDN-2 for deliveries performed by dCDN-2 itself. Say, | locally by dCDN-2 for deliveries performed by dCDN-2 itself. Say, | |||
for illustration, that the content delivery performed by dCDN-3 on | for illustration, that the content delivery performed by dCDN-3 on | |||
behalf of dCDN-2 had actually been redirected to dCDN-2 by uCDN, and | behalf of dCDN-2 had actually been redirected to dCDN-2 by uCDN, and | |||
say that another content delivery has just been redirected by uCDN to | say that another content delivery has just been redirected by uCDN to | |||
dCDN-2 and that dCDN-2 elected to perform the corresponding delivery | dCDN-2 and that dCDN-2 elected to perform the corresponding delivery | |||
itself. Then after Filtering and Rectification (as illustrated in | itself. Then after Filtering and Rectification (as illustrated in | |||
Figure 2), dCDN-2 will include the two Logging Records corresponding | Figure 2), dCDN-2 will include the two Logging Records corresponding | |||
respectively to the delivery performed by dCDN-3 and the delivery | respectively to the delivery performed by dCDN-3 and the delivery | |||
performed by dCDN-2, in the next CDNI Logging File that will be | performed by dCDN-2, in the next CDNI Logging File that will be | |||
communicated to uCDN. An example of such CDNI Logging File is | communicated to uCDN. An example of such CDNI Logging File is | |||
illustrated below in Figure 6. | illustrated below in Figure 6. | |||
#Version:<HTAB>CDNI/1.0<CRLF> | #version:<HTAB>CDNI/1.0<CRLF> | |||
#UUID:<HTAB>urn:uuid:1234567-8fedc-abab-0987654321ff<CRLF> | #UUID:<HTAB>urn:uuid:1234567-8fedc-abab-0987654321ff<CRLF> | |||
#Claimed-Origin:<HTAB>cdni-logging-entity.dcdn-2.example.com<CRLF> | #claimed-origin:<HTAB>cdni-logging-entity.dcdn-2.example.com<CRLF> | |||
#Record-Type:<HTAB>cdni_http_request_v1<CRLF> | #record-type:<HTAB>cdni_http_request_v1<CRLF> | |||
#Fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | #fields:<HTAB>date<HTAB>time<HTAB>time-taken<HTAB>c-ip<HTAB> | |||
c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | c-ip-anonymizing<HTAB>cs-method<HTAB>u-uri<HTAB>protocol<HTAB> | |||
sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | sc-status<HTAB>sc-total-bytes<HTAB>cs(User-Agent)<HTAB> | |||
cs(Referer)<HTAB>s-cached<CRLF> | cs(Referer)<HTAB>s-cached<CRLF> | |||
2013-05-17<HTAB>00:39:09.119<HTAB>14.07<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | 2013-05-17<HTAB>00:39:09.119<HTAB>14.07<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | |||
http://cdni-ucdn.dcdn-2.example.com/video/movie118.mp4<HTAB> | http://cdni-ucdn.dcdn-2.example.com/video/movie118.mp4<HTAB> | |||
HTTP/1.1<HTAB>200<HTAB>15799210<HTAB>"Mozilla/5.0 | HTTP/1.1<HTAB>200<HTAB>15799210<HTAB>"Mozilla/5.0 | |||
(Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | |||
Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | |||
"host1.example.com"<HTAB>1<CRLF> | "host1.example.com"<HTAB>1<CRLF> | |||
2013-05-17<HTAB>01:42:53.437<HTAB>52.879<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | 2013-05-17<HTAB>01:42:53.437<HTAB>52.879<HTAB>10.5.10.0<HTAB>8<HTAB>GET<HTAB> | |||
http://cdni-ucdn.dcdn-2.example.com/video/picture11.mp4<HTAB> | http://cdni-ucdn.dcdn-2.example.com/video/picture11.mp4<HTAB> | |||
HTTP/1.0<HTAB>200<HTAB>97234724<HTAB>"Mozilla/5.0 | HTTP/1.0<HTAB>200<HTAB>97234724<HTAB>"Mozilla/5.0 | |||
(Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like | |||
Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | Gecko) Chrome/5.0.375.127 Safari /533.4"<HTAB> | |||
"host5.example.com"<HTAB>0<CRLF> | "host5.example.com"<HTAB>0<CRLF> | |||
#SHA256-Hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | #SHA256-hash:<HTAB>...32-hexadecimal-digit hash value...<CRLF> | |||
Figure 6: Cascaded CDNI Logging File Example (dCDN-2 to uCDN) | Figure 6: Cascaded CDNI Logging File Example (dCDN-2 to uCDN) | |||
If uCDN establishes by some means (e.g. via TLS authentication when | If uCDN establishes by some means (e.g. via TLS authentication when | |||
pulling the CDNI Logging File) the identity of the entity from which | pulling the CDNI Logging File) the identity of the entity from which | |||
it pulled the CDNI Logging File, uCDN can add to the CDNI Logging an | it pulled the CDNI Logging File, uCDN can add to the CDNI Logging an | |||
Established-Origin directive as illustrated below: | established-origin directive as illustrated below: | |||
#Established-Origin:<HTAB>cdni-logging-entity.dcdn- | #established-origin:<HTAB>cdni-logging-entity.dcdn- | |||
2.example.com<CRLF> | 2.example.com<CRLF> | |||
In the example of Figure 6, we observe that: | In the example of Figure 6, we observe that: | |||
o the first Logging Record corresponds to the Logging Record | o the first Logging Record corresponds to the Logging Record | |||
communicated earlier to dCDN-2 by dCDN-3, which corresponds to a | communicated earlier to dCDN-2 by dCDN-3, which corresponds to a | |||
delivery redirected by uCDN to dCDN-2 and then redirected by | delivery redirected by uCDN to dCDN-2 and then redirected by | |||
dCDN-2 to dCDN-3. The fields values in this Logging Record are | dCDN-2 to dCDN-3. The fields values in this Logging Record are | |||
copied from the corresponding CDNI Logging REcord communicated to | copied from the corresponding CDNI Logging REcord communicated to | |||
dCDN2 by dCDN-3, with the exception of the u-uri that now reflects | dCDN2 by dCDN-3, with the exception of the u-uri that now reflects | |||
skipping to change at page 42, line 14 | skipping to change at line 1942 | |||
4.2. CDNI Logging File Pull | 4.2. CDNI Logging File Pull | |||
A client-side implementation of the CDNI Logging interface MAY pull, | A client-side implementation of the CDNI Logging interface MAY pull, | |||
at its convenience, a CDNI Logging File that is published by the | at its convenience, a CDNI Logging File that is published by the | |||
server-side in the CDNI Logging Feed (in the subscription document or | server-side in the CDNI Logging Feed (in the subscription document or | |||
an archive document). To do so, the client-side: | an archive document). To do so, the client-side: | |||
o MUST implement HTTP/1.1 ([RFC7230],[RFC7231], [RFC7232], | o MUST implement HTTP/1.1 ([RFC7230],[RFC7231], [RFC7232], | |||
[RFC7233], [RFC7234], [RFC7235]), MAY also support other HTTP | [RFC7233], [RFC7234], [RFC7235]), MAY also support other HTTP | |||
versions (e.g., HTTP/2 [I-D.ietf-httpbis-http2]) and MAY negotiate | versions (e.g., HTTP/2 [RFC7540]) and MAY negotiate which HTTP | |||
which HTTP version is actually used. This allows operators and | version is actually used. This allows operators and implementers | |||
implementers to choose to use later versions of HTTP to take | to choose to use later versions of HTTP to take advantage of new | |||
advantage of new features, while still ensuring interoperability | features, while still ensuring interoperability with systems that | |||
with systems that only support HTTP/1.1. | only support HTTP/1.1. | |||
o MUST use the URI that was associated to the CDNI Logging File | o MUST use the URI that was associated to the CDNI Logging File | |||
(within the "src" attribute of the corresponding atom:content | (within the "src" attribute of the corresponding atom:content | |||
element) in the CDNI Logging Feed; | element) in the CDNI Logging Feed; | |||
o MUST support exchange of CDNI Logging Files with no content | o MUST support exchange of CDNI Logging Files with no content | |||
encoding applied to the representation; | encoding applied to the representation; | |||
o MUST support exchange of CDNI Logging Files with "gzip" content | o MUST support exchange of CDNI Logging Files with "gzip" content | |||
encoding (as defined in [RFC7230]) applied to the representation. | encoding (as defined in [RFC7230]) applied to the representation. | |||
skipping to change at page 44, line 7 | skipping to change at line 2028 | |||
information with a significantly reduced time-lag (e.g., sub-minute | information with a significantly reduced time-lag (e.g., sub-minute | |||
or sub-second) between when the event occurred in the dCDN and when | or sub-second) between when the event occurred in the dCDN and when | |||
the corresponding CDNI Logging Record is made available to the uCDN. | the corresponding CDNI Logging Record is made available to the uCDN. | |||
This can satisfy log-consuming applications requiring extremely fresh | This can satisfy log-consuming applications requiring extremely fresh | |||
logging information such as near-real-time content delivery | logging information such as near-real-time content delivery | |||
monitoring. Such mechanisms are for further study and outside the | monitoring. Such mechanisms are for further study and outside the | |||
scope of this document. | scope of this document. | |||
6. IANA Considerations | 6. IANA Considerations | |||
When IANA allocates new extensions to CDNI Logging Directive Names | ||||
Registry, CDNI Logging File version Registry, CDNI Logging record- | ||||
type Registry or CDNI Logging fields Registry, IANA MUST take into | ||||
account that the directive names are case-insensitive as per the | ||||
basic ABNF([RFC2234]). | ||||
6.1. CDNI Logging Directive Names Registry | 6.1. CDNI Logging Directive Names Registry | |||
The IANA is requested to create a new registry, CDNI Logging | The IANA is requested to create a new registry, CDNI Logging | |||
Directive Names. | Directive Names. | |||
The initial contents of the CDNI Logging Directives registry comprise | The initial contents of the CDNI Logging Directives registry comprise | |||
the names of the directives specified in Section 3.3 of the present | the names of the directives specified in Section 3.3 of the present | |||
document, and are as follows: | document, and are as follows: | |||
+------------------------------+-----------+ | +------------------------------+-----------+ | |||
| Directive Name | Reference | | | Directive Name | Reference | | |||
+------------------------------+-----------+ | +------------------------------+-----------+ | |||
| Version | RFC xxxx | | | version | RFC xxxx | | |||
| UUID | RFC xxxx | | | UUID | RFC xxxx | | |||
| Claimed-Origin | RFC xxxx | | | claimed-origin | RFC xxxx | | |||
| Established-Origin | RFC xxxx | | | established-origin | RFC xxxx | | |||
| Remark | RFC xxxx | | | remark | RFC xxxx | | |||
| Record-Type | RFC xxxx | | | record-type | RFC xxxx | | |||
| Fields | RFC xxxx | | | fields | RFC xxxx | | |||
| SHA256-Hash | RFC xxxx | | | SHA256-hash | RFC xxxx | | |||
+------------------------------+-----------+ | +------------------------------+-----------+ | |||
Figure 8 | Figure 8 | |||
[Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | [Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | |||
the present document] | the present document] | |||
Within the registry, names are to be allocated by IANA according to | Within the registry, names are to be allocated by IANA according to | |||
the "Specification Required" policy specified in [RFC5226]. | the "Specification Required" policy specified in [RFC5226]. | |||
Directive names are to be allocated by IANA with a format of | Directive names are to be allocated by IANA with a format of | |||
NAMEFORMAT (see Section 3.1). | NAMEFORMAT (see Section 3.1). All directive names and field names | |||
defined in the logging file are case-insensitive as per the basic | ||||
ABNF([RFC2234]). | ||||
Each specification that defines a new CDNI Logging directive needs to | Each specification that defines a new CDNI Logging directive needs to | |||
contain a description for the new directive with the same set of | contain a description for the new directive with the same set of | |||
information as provided in Section 3.3 (i.e., format, directive value | information as provided in Section 3.3 (i.e., format, directive value | |||
and occurrence). | and occurrence). | |||
6.2. CDNI Logging File Version Registry | 6.2. CDNI Logging File version Registry | |||
The IANA is requested to create a new registry, CDNI Logging File | The IANA is requested to create a new registry, CDNI Logging File | |||
Version. | version. | |||
The initial contents of the CDNI Logging Logging File Version | The initial contents of the CDNI Logging Logging File version | |||
registry comprise the value "CDNI/1.0" specified in Section 3.3 of | registry comprise the value "CDNI/1.0" specified in Section 3.3 of | |||
the present document, and are as follows: | the present document, and are as follows: | |||
+-----------------+-----------+----------------------------------+ | +-----------------+-----------+----------------------------------+ | |||
| Version | Reference | Description | | | version | Reference | Description | | |||
+-----------------+-----------+----------------------------------+ | +-----------------+-----------+----------------------------------+ | |||
| CDNI/1.0 | RFC xxxx | CDNI Logging File version 1.0 | | | cdni/1.0 | RFC xxxx | CDNI Logging File version 1.0 | | |||
| | | as specified in RFC xxxx | | | | | as specified in RFC xxxx | | |||
+-----------------+-----------+----------------------------------+ | +-----------------+-----------+----------------------------------+ | |||
Figure 9 | Figure 9 | |||
[Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | [Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | |||
the present document] | the present document] | |||
Within the registry, Version values are to be allocated by IANA | Within the registry, version values are to be allocated by IANA | |||
according to the "Specification Required" policy specified in | according to the "Specification Required" policy specified in | |||
[RFC5226]. Version values are to be allocated by IANA with a format | [RFC5226]. Version values are to be allocated by IANA with a format | |||
of NAMEFORMAT (see Section 3.1). | of NAMEFORMAT (see Section 3.1). | |||
6.3. CDNI Logging Record-Types Registry | 6.3. CDNI Logging record-types Registry | |||
The IANA is requested to create a new registry, CDNI Logging Record- | The IANA is requested to create a new registry, CDNI Logging record- | |||
Types. | types. | |||
The initial contents of the CDNI Logging Record-Types registry | The initial contents of the CDNI Logging record-types registry | |||
comprise the names of the CDNI Logging Record types specified in | comprise the names of the CDNI Logging Record types specified in | |||
Section 3.4 of the present document, and are as follows: | Section 3.4 of the present document, and are as follows: | |||
+----------------------+-----------+----------------------------------+ | +----------------------+-----------+----------------------------------+ | |||
| Record-Types | Reference | Description | | | record-types | Reference | Description | | |||
+----------------------+-----------+----------------------------------+ | +----------------------+-----------+----------------------------------+ | |||
| cdni_http_request_v1 | RFC xxxx | CDNI Logging Record version 1 | | | cdni_http_request_v1 | RFC xxxx | CDNI Logging Record version 1 | | |||
| | | for content delivery using HTTP | | | | | for content delivery using HTTP | | |||
+----------------------+-----------+----------------------------------+ | +----------------------+-----------+----------------------------------+ | |||
Figure 10 | Figure 10 | |||
[Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | [Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | |||
the present document] | the present document] | |||
Within the registry, Record-Types are to be allocated by IANA | Within the registry, record-types are to be allocated by IANA | |||
according to the "Specification Required" policy specified in | according to the "Specification Required" policy specified in | |||
[RFC5226]. Record-Types are to be allocated by IANA with a format of | [RFC5226]. record-types are to be allocated by IANA with a format of | |||
NAMEFORMAT (see Section 3.1). | NAMEFORMAT (see Section 3.1). | |||
Each specification that defines a new Record-Type needs to contain a | Each specification that defines a new record-type needs to contain a | |||
description for the new Record-Type with the same set of information | description for the new record-type with the same set of information | |||
as provided in Section 3.4.1. This includes: | as provided in Section 3.4.1. This includes: | |||
o a list of all the CDNI Logging Fields that can appear in a CDNI | o a list of all the CDNI Logging fields that can appear in a CDNI | |||
Logging Record of the new Record-Type | Logging Record of the new record-type | |||
o for all these Fields: a specification of the occurrence for each | o for all these fields: a specification of the occurrence for each | |||
Field in the new Record-Type | Field in the new record-type | |||
o for every newly defined Field, i.e., for every Field that results | o for every newly defined Field, i.e., for every Field that results | |||
in a registration in the CDNI Logging Field Names Registry | in a registration in the CDNI Logging Field Names Registry | |||
(Section 6.4): a specification of the field name, format and field | (Section 6.4): a specification of the field name, format and field | |||
value. | value. | |||
6.4. CDNI Logging Field Names Registry | 6.4. CDNI Logging Field Names Registry | |||
The IANA is requested to create a new registry, CDNI Logging Field | The IANA is requested to create a new registry, CDNI Logging Field | |||
Names. | Names. | |||
This registry is intended to be shared across the currently defined | This registry is intended to be shared across the currently defined | |||
Record-Type (i.e., cdni_http_request_v1) as well as potential other | record-type (i.e., cdni_http_request_v1) as well as potential other | |||
CDNI Logging Record-Types that may be defined in separate | CDNI Logging record-types that may be defined in separate | |||
specifications. When a Field from this registry is used by another | specifications. When a Field from this registry is used by another | |||
CDNI Logging Record-Type, it is to be used with the exact semantics | CDNI Logging record-type, it is to be used with the exact semantics | |||
and format specified in the document that registered this field and | and format specified in the document that registered this field and | |||
that is identified in the Reference column of the registry. If | that is identified in the Reference column of the registry. If | |||
another CDNI Logging Record-Type requires a Field with semantics that | another CDNI Logging record-type requires a Field with semantics that | |||
are not strictly identical, or a format that is not strictly | are not strictly identical, or a format that is not strictly | |||
identical then this new Field is to be registered in the registry | identical then this new Field is to be registered in the registry | |||
with a different Field name. When a Field from this registry is used | with a different Field name. When a Field from this registry is used | |||
by another CDNI Logging Record-Type, it can be used with different | by another CDNI Logging record-type, it can be used with different | |||
occurence rules. | occurrence rules. | |||
The initial contents of the CDNI Logging Fields Names registry | The initial contents of the CDNI Logging fields Names registry | |||
comprise the names of the CDNI Logging fields specified in | comprise the names of the CDNI Logging fields specified in | |||
Section 3.4 of the present document, and are as follows: | Section 3.4 of the present document, and are as follows: | |||
+------------------------------------------+-----------+ | +------------------------------------------+-----------+ | |||
| Field Name | Reference | | | Field Name | Reference | | |||
+------------------------------------------+-----------+ | +------------------------------------------+-----------+ | |||
| date | RFC xxxx | | | date | RFC xxxx | | |||
| time | RFC xxxx | | | time | RFC xxxx | | |||
| time-taken | RFC xxxx | | | time-taken | RFC xxxx | | |||
| c-ip | RFC xxxx | | | c-ip | RFC xxxx | | |||
skipping to change at page 47, line 24 | skipping to change at line 2182 | |||
| s-ip | RFC xxxx | | | s-ip | RFC xxxx | | |||
| s-hostname | RFC xxxx | | | s-hostname | RFC xxxx | | |||
| s-port | RFC xxxx | | | s-port | RFC xxxx | | |||
| cs-method | RFC xxxx | | | cs-method | RFC xxxx | | |||
| cs-uri | RFC xxxx | | | cs-uri | RFC xxxx | | |||
| u-uri | RFC xxxx | | | u-uri | RFC xxxx | | |||
| protocol | RFC xxxx | | | protocol | RFC xxxx | | |||
| sc-status | RFC xxxx | | | sc-status | RFC xxxx | | |||
| sc-total-bytes | RFC xxxx | | | sc-total-bytes | RFC xxxx | | |||
| sc-entity-bytes | RFC xxxx | | | sc-entity-bytes | RFC xxxx | | |||
| cs(<HTTP-header>) | RFC xxxx | | | cs(insert_HTTP_header_name_here) | RFC xxxx | | |||
| sc(<HTTP-header>) | RFC xxxx | | | sc(insert_HTTP_header_name_here) | RFC xxxx | | |||
| s-ccid | RFC xxxx | | | s-ccid | RFC xxxx | | |||
| s-sid | RFC xxxx | | | s-sid | RFC xxxx | | |||
| s-cached | RFC xxxx | | | s-cached | RFC xxxx | | |||
+------------------------------------------+-----------+ | +------------------------------------------+-----------+ | |||
Figure 11 | Figure 11 | |||
[Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | [Instructions to IANA: Replace "RFC xxxx" above by the RFC number of | |||
the present document] | the present document] | |||
skipping to change at page 48, line 16 | skipping to change at line 2219 | |||
An implementation of the CDNI Logging interface MUST support TLS | An implementation of the CDNI Logging interface MUST support TLS | |||
transport of the CDNI Logging feed (Section 4.1) and of the CDNI | transport of the CDNI Logging feed (Section 4.1) and of the CDNI | |||
Logging File pull (Section 4.2) as per [RFC2818] and [RFC7230]. | Logging File pull (Section 4.2) as per [RFC2818] and [RFC7230]. | |||
The use of TLS for transport of the CDNI Logging feed and CDNI | The use of TLS for transport of the CDNI Logging feed and CDNI | |||
Logging File pull allows: | Logging File pull allows: | |||
o the dCDN and uCDN to authenticate each other | o the dCDN and uCDN to authenticate each other | |||
and, once they have mutually authenticated each other, it allows:: | and, once they have mutually authenticated each other, it allows: | |||
o the dCDN and uCDN to authorize each other (to ensure they are | o the dCDN and uCDN to authorize each other (to ensure they are | |||
transmitting/receiving CDNI Logging File to/from an authorized | transmitting/receiving CDNI Logging File to/from an authorized | |||
CDN) | CDN) | |||
o the CDNI Logging information to be transmitted with | o the CDNI Logging information to be transmitted with | |||
confidentiality | confidentiality | |||
o the integrity of the CDNI Logging information to be protected | o the integrity of the CDNI Logging information to be protected | |||
during the exchange. | during the exchange. | |||
In an environment where any such protection is required, the use of a | In an environment where any such protection is required, mutually | |||
mutually authenticated encrypted transport MUST be used to ensure | authenticated encrypted transport MUST be used to ensure | |||
confidentiality of the logging information. TLS MUST be used | confidentiality of the logging information. To that end, TLS MUST be | |||
(including authentication of the remote end) by the server- side and | used (including authentication of the remote end) by the server-side | |||
the client-side of the CDNI Logging feed, as well as the server- side | and the client-side of the CDNI Logging feed, as well as the server- | |||
and the client-side of the CDNI Logging File pull mechanism. | side and the client-side of the CDNI Logging File pull mechanism. | |||
The general TLS usage guidance in [I-D.ietf-uta-tls-bcp] SHOULD be | When TLS is used, the general TLS usage guidance in [RFC7525] MUST be | |||
followed. | followed. | |||
The SHA256-Hash directive inside the CDNI Logging File provides | The SHA256-hash directive inside the CDNI Logging File provides | |||
additional integrity protection, this time targeting potential | additional integrity protection, this time targeting potential | |||
corruption of the CDNI logging information during the CDNI Logging | corruption of the CDNI logging information during the CDNI Logging | |||
File generation, storage or exchange. This mechanism does not itself | File generation, storage or exchange. This mechanism does not itself | |||
allow restoration of the corrupted CDNI Logging information, but it | allow restoration of the corrupted CDNI Logging information, but it | |||
allows detection of such corruption and therefore triggering of | allows detection of such corruption and therefore triggering of | |||
appropriate corrective actions (e.g., discard of corrupted | appropriate corrective actions (e.g., discard of corrupted | |||
information, attempt to re-obtain the CDNI Logging information). | information, attempt to re-obtain the CDNI Logging information). | |||
Note that the SHA256-Hash does not protect against tampering by a | Note that the SHA256-hash does not protect against tampering by a | |||
third party, since such a third party could have recomputed and | third party, since such a third party could have recomputed and | |||
updated the SHA256-Hash after tampering. Protection against third | updated the SHA256-hash after tampering. Protection against third | |||
party tampering can be achieved as discussed above through the use of | party tampering can be achieved as discussed above through the use of | |||
TLS. | TLS. | |||
7.2. Denial of Service | 7.2. Denial of Service | |||
This document does not define specific mechanism to protect against | This document does not define specific mechanism to protect against | |||
Denial of Service (DoS) attacks on the Logging Interface. However, | Denial of Service (DoS) attacks on the Logging Interface. However, | |||
the CDNI Logging feed and CDNI Logging pull endpoints are typically | the CDNI Logging feed and CDNI Logging pull endpoints are typically | |||
to be accessed only by a very small number of valid remote endpoints | to be accessed only by a very small number of valid remote endpoints | |||
and therefore can be easily protected against DoS attacks through the | and therefore can be easily protected against DoS attacks through the | |||
skipping to change at page 50, line 11 | skipping to change at line 2310 | |||
We note that anonymization of End Users IP address does not fully | We note that anonymization of End Users IP address does not fully | |||
protect against deriving potentially sensitive information about | protect against deriving potentially sensitive information about | |||
traffic patterns; in general, increasing the number of bits that are | traffic patterns; in general, increasing the number of bits that are | |||
anonymized can mitigate the risks of deriving such sensitive traffic | anonymized can mitigate the risks of deriving such sensitive traffic | |||
pattern information. | pattern information. | |||
We also note that independently of IP addresses, the query string | We also note that independently of IP addresses, the query string | |||
portion of the URL that may be conveyed inside the cs-uri and u-uri | portion of the URL that may be conveyed inside the cs-uri and u-uri | |||
fields of CDNI Logging Files, or the HTTP cookies( [RFC6265]) that | fields of CDNI Logging Files, or the HTTP cookies( [RFC6265]) that | |||
may be conveyed inside the cs(<HTTP-header-name>) field of CDNI | may be conveyed inside the cs(<HTTP-header-name>) field of CDNI | |||
Logging Fields, may contain personnal information or information that | Logging fields, may contain personnal information or information that | |||
can be exploited to derive personal information. Where this is a | can be exploited to derive personal information. Where this is a | |||
concern, the CDNI Logging interface specification allows the dCDN to | concern, the CDNI Logging interface specification allows the dCDN to | |||
not include the cs-uri and to include a u-uri that removes (or hides) | not include the cs-uri and to include a u-uri that removes (or hides) | |||
the sensitive part of the query string and allows the dCDN to not | the sensitive part of the query string and allows the dCDN to not | |||
include the cs(<HTTP-header-name>) fields corresponding to HTTP | include the cs(<HTTP-header-name>) fields corresponding to HTTP | |||
headers associated with cookies. | headers associated with cookies. | |||
8. Acknowledgments | 8. Acknowledgments | |||
This document borrows from the W3C Extended Log Format [ELF]. | This document borrows from the W3C Extended Log Format [ELF]. | |||
skipping to change at page 50, line 38 | skipping to change at line 2337 | |||
Finally, we also thank Sebastien Cubaud, Pawel Grochocki, Christian | Finally, we also thank Sebastien Cubaud, Pawel Grochocki, Christian | |||
Jacquenet, Yannick Le Louedec, Anne Marrec , Emile Stephan, Fabio | Jacquenet, Yannick Le Louedec, Anne Marrec , Emile Stephan, Fabio | |||
Costa, Sara Oueslati, Yvan Massot, Renaud Edel, Joel Favier and the | Costa, Sara Oueslati, Yvan Massot, Renaud Edel, Joel Favier and the | |||
contributors of the EU FP7 OCEAN project for their input in the early | contributors of the EU FP7 OCEAN project for their input in the early | |||
versions of this document. | versions of this document. | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-uta-tls-bcp] | ||||
Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
"Recommendations for Secure Use of TLS and DTLS", draft- | ||||
ietf-uta-tls-bcp-11 (work in progress), February 2015. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
Specifications: ABNF", RFC 2234, November 1997. | ||||
[RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the | [RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the | |||
Internet: Timestamps", RFC 3339, July 2002. | Internet: Timestamps", RFC 3339, July 2002. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, RFC | Resource Identifier (URI): Generic Syntax", STD 66, RFC | |||
3986, January 2005. | 3986, January 2005. | |||
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
Unique IDentifier (UUID) URN Namespace", RFC 4122, July | Unique IDentifier (UUID) URN Namespace", RFC 4122, July | |||
2005. | 2005. | |||
skipping to change at page 51, line 47 | skipping to change at line 2392 | |||
Transfer Protocol (HTTP/1.1): Range Requests", RFC 7233, | Transfer Protocol (HTTP/1.1): Range Requests", RFC 7233, | |||
June 2014. | June 2014. | |||
[RFC7234] Fielding, R., Nottingham, M., and J. Reschke, "Hypertext | [RFC7234] Fielding, R., Nottingham, M., and J. Reschke, "Hypertext | |||
Transfer Protocol (HTTP/1.1): Caching", RFC 7234, June | Transfer Protocol (HTTP/1.1): Caching", RFC 7234, June | |||
2014. | 2014. | |||
[RFC7235] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol | [RFC7235] Fielding, R. and J. Reschke, "Hypertext Transfer Protocol | |||
(HTTP/1.1): Authentication", RFC 7235, June 2014. | (HTTP/1.1): Authentication", RFC 7235, June 2014. | |||
[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, May 2015. | ||||
[RFC7540] Belshe, M., Peon, R., and M. Thomson, "Hypertext Transfer | ||||
Protocol Version 2 (HTTP/2)", RFC 7540, May 2015. | ||||
9.2. Informative References | 9.2. Informative References | |||
[CHAR_SET] | [CHAR_SET] | |||
"IANA Character Sets registry", | "IANA Character Sets registry", | |||
<http://www.iana.org/assignments/character-sets/ | <http://www.iana.org/assignments/character-sets/ | |||
character-sets.xml>. | character-sets.xml>. | |||
[ELF] Phillip M. Hallam-Baker, and Brian Behlendorf, "Extended | [ELF] Phillip M. Hallam-Baker, and Brian Behlendorf, "Extended | |||
Log File Format, W3C (work in progress), WD-logfile- | Log File Format, W3C (work in progress), WD-logfile- | |||
960323", <http://www.w3.org/TR/WD-logfile.html>. | 960323", <http://www.w3.org/TR/WD-logfile.html>. | |||
End of changes. 144 change blocks. | ||||
268 lines changed or deleted | 339 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |