Internet DRAFT - draft-siloniz-cdni-edge-control-metadata
draft-siloniz-cdni-edge-control-metadata
Network Working Group A. Siloniz
Internet-Draft Telefonica
Intended status: Standards Track G. Goldstein
Expires: 11 January 2024 Lumen Technologies
10 July 2023
CDNI Edge Control Metadata
draft-siloniz-cdni-edge-control-metadata-01
Abstract
CDNs typically require a set of configuration metadata to provide
directives for the processing of responses downstream (at the edge
and in the user agent). This document specifies GenericMetadata
objects to meet those requirements, defining edge processing rules
such as CORS handling, response compressions, and client connection
failures.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 11 January 2024.
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the
document authors. All rights reserved.
Siloniz & Goldstein Expires 11 January 2024 [Page 1]
Internet-Draft CDNI Edge Control Metadata July 2023
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 2
3. MI.CrossoriginPolicy . . . . . . . . . . . . . . . . . . . . 3
3.1. MI.AccessControlAllowOrigin . . . . . . . . . . . . . . . 6
4. MI.AllowCompress . . . . . . . . . . . . . . . . . . . . . . 8
5. MI.ClientConnectionControl . . . . . . . . . . . . . . . . . 9
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . 10
7. Security Considerations . . . . . . . . . . . . . . . . . . . 10
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10
8.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 10
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 11
10.1. Normative References . . . . . . . . . . . . . . . . . . 11
10.2. Informative References . . . . . . . . . . . . . . . . . 12
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12
1. Introduction
CDNs typically require a set of configuration metadata to provide
directives for the processing of responses downstream (at the edge
and in the user agent). This document specifies GenericMetadata
objects to meet those requirements, defining edge processing rules
such as CORS handling, response compressions, and client connection
failures.
2. Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Siloniz & Goldstein Expires 11 January 2024 [Page 2]
Internet-Draft CDNI Edge Control Metadata July 2023
3. MI.CrossoriginPolicy
Delegation of traffic between CDNs over an Open Caching node (OCN)
based on Hypertext Transfer Protocol (HTTP) redirection changes the
domain name in the client requests. This represents a cross-origin
request that must be managed appropriately using (CORS headers in the
responses.
The dynamic generation of CORS headers is typical in modern HTTP
request processing and avoids CORS validation forwarded to the CDN
origin servers, particularly with the preflight OPTIONS requests.
The CDN Interconnection (CDNI) metadata model requires extensions to
specify how a CDN or Open Caching node should generate and evaluate
these headers.
Required capabilities:
Set a default value for CORS response headers independent of the
origin request header value.
1. Set a default value for CORS response headers independent of the
origin request header value.
2. Match the origin request header with a list of valid values to
return or not return the CORS response headers.
3. Set a list of custom headers that can be exposed to the client
(expose headers).
4. Support preflight requests using the OPTIONS method, including
custom header validation, expose headers, and methods.
5. Support credentials validation within CORS.
Simple CORS requests are those where both HTTP method and headers in
the request don´t require a preflight request. The user agent (UA)
request can include an origin header set to the URL domain of the
webpage that the player runs. Depending on the metadata
configuration, the logic to apply by the Open Caching node is:
Validation of the origin header - Metadata can include a list of
valid domains to validate the request origin header. If it does not
match, the CORS header MUST NOT be included in the response.
1. Validation of the origin header - Metadata can include a list of
valid domains to validate the request origin header. If it does
not match, the CORS header MUST NOT be included in the response.
Siloniz & Goldstein Expires 11 January 2024 [Page 3]
Internet-Draft CDNI Edge Control Metadata July 2023
2. WIldcard usage - Depending on the configuration, the resultant
CORS header to include in the response will be the same as the
request origin header, or a wildcard.
3. If no validation of request is included in the origin header, set
a default value for CORS response headers independent of the
origin request header value.
When a UA makes a request that includes a method or headers that
require a CORS preflight request, the UA will use the OPTIONS method
to the resource, including the origin header. If CORS is enabled and
the request passes the origin validation, the OCN SHOULD respond with
the set of headers that indicate what is permitted for that resource,
including one or more of the following:
Allowed methods
1. Allowed methods
2. Allowed credentials
3. Allowed request headers
4. Maximum age that the OPTIONS request is valid
5. Headers that can be exposed to the client
When an upstream CDN (uCDN) configures any of those advanced
parameters, it is requesting the dCDN generate synthetic responses to
OPTIONS requests. Therefore, no conditional request is performed to
the uCDN origin. The uCDN SHOULD configure these values taking that
into account. If some of the advanced parameters are empty, the dCDN
would not send the corresponding header into the UA OPTIONS request.
In cases where the uCDN only configures the
MI.AccessControlAllowOrigin subobject, the dCDN will not generate
synthetic responses to OPTIONS requests. Instead, the dCDN will
validate with the uCDN every OPTIONS request to obtain the response.
MI.CrossoriginPolicy is a GenericMetadata object that allows for the
specification of dynamically generated CORS headers.
Property: allow-origin
- Description: Validation of simple CORS requests.
- Type: Object MI.AccessControlAllowOrigin
Siloniz & Goldstein Expires 11 January 2024 [Page 4]
Internet-Draft CDNI Edge Control Metadata July 2023
- Mandatory-to-Specify: Yes
Property: expose-headers
- Description: A list of values the OCN will include in the
Access-Control-Expose-Headers response header to a preflight
request.
- Type: Array of strings
- Mandatory-to-Specify: No
Property: allow-methods
- Description: A list of values the OCN will include in the
Access-Control-Allow-Methods response header to a preflight
request.
- Type: Array of strings
- Mandatory-to-Specify: No
Property: allow-headers
- Description: A list of values the OCN will include in the
Access-Control-Allow-Headers response header to a preflight
request.
- Type: Array of strings
- Mandatory-to-Specify: No
Property: allow-credentials
- Description: The value the OCN will include in the Access-
Control-Allow-Credentials response header to a preflight
request.
- Type: Boolean
- Mandatory-to-Specify: No
Property: max-age
- Description: The value the OCN will include in the Access-
Control-Max-Age response header to a preflight request.
- Type: Integer
Siloniz & Goldstein Expires 11 January 2024 [Page 5]
Internet-Draft CDNI Edge Control Metadata July 2023
- Mandatory-to-Specify: No
Property: no-origin-response-headers
- Description: In the case of a request that has no Origin field,
return this set of headers with the response.
- Type: Array of MI.HTTPHeader
- Mandatory-to-Specify: No
Property: apply-to-all-methods
- Description: By default, the CORS configuration refers to
OPTIONS requests. Setting this flag to "True" applies the
entire CORS configuration to the other methods as well.
- Type: Boolean
- Mandatory-to-Specify: No. The default is "False".
3.1. MI.AccessControlAllowOrigin
The MI.AccessControlAllowOrigin object has the following properties:
Property: allow-list
- Description: List of valid URLs that will be used to match the
request origin header. The origin header is an HTTP extension.
Its value is a version of the Referer header in some specific
requests, and used for cross-origin requests. Permitted values
are schema://hostname[:port]
- Type: Array of PatternMatch objects, defined in [RFC8006]
section 4.1.5
- Mandatory-to-Specify: Yes
Property: wildcard-return
- Description: If "True", the OCN will include a wildcard (*) in
the Access-Control-Allow-Origin response header. If "False",
the OCN will reflect the request origin header in the Access-
Control-Allow-Origin response header.
- Type: Boolean
Siloniz & Goldstein Expires 11 January 2024 [Page 6]
Internet-Draft CDNI Edge Control Metadata July 2023
- Mandatory-to-Specify: Yes
The examples below demonstrate how to configure response headers
dynamically for CORS validation.
The following is an example of a simple CORS validation
configuration:
{
"generic-metadata-type": "MI.CrossoriginPolicy",
"generic-metadata-value": {
"allow-origin": {
"allow-list": [
{
"pattern": "*"
}
],
"wildcard-return": true
}
}
}
The following is an example of validation of a preflight request when
some of the headers included in the subsequent object request are not
included in the CORS specification safelist:
{
"generic-metadata-type": "MI.CrossoriginPolicy",
"generic-metadata-value": {
"allow-origin": {
"allow-list": [
{
"pattern": "*://sourcepage.example.com"
},
"wildcard-return": false
},
"allow-methods": [ "GET", "POST" ],
"allow-credentials": true,
"allow-headers": [ "X-PINGOTHER", "Content-Type" ],
"expose-headers": [ "X-User", "Authorization" ],
"max-age": 3600
}
}
}
Siloniz & Goldstein Expires 11 January 2024 [Page 7]
Internet-Draft CDNI Edge Control Metadata July 2023
4. MI.AllowCompress
Downstream CDNs often have the ability to compress HTTP response
bodies in cases where the client has declared that it can accept
compressed responses (via an Accept-Encoding header), but the source/
origin has returned an uncompressed response.
The specific compression algorithm used by the dCDN is negotiated by
the client’s Accept-Encoding header according to [RFC9110] (including
“q=” preferences) and the compression capabilities available on the
dCDN.
In addition, HeaderTransform allows the uCDN to normalize, or modify,
the Accept-Encoding header to allow for fine-grain control over the
selection of the compression algorithm (e.g., gzip, compress,
deflate, br, etc.).
MI.AllowCompress is a new GenericMetadata object that allows the dCDN
to compress content before sending it to the client.
Property: allow-compress
- Description: If set to "True", the dCDN will try to compress
the response to the client based on the Accept-Encoding request
header.
- Type: Boolean. The values are "True" or "False".
- Mandatory-to-Specify: No. The default is "False".
The following examples illustrate the use of MI.AllowCompress in the
context of the Processing Stages Model that allowed for metadata to
be applied conditionally based on evaluation of HTTP request headers.
See the Processing Stages Metadata Specification [SVTA2032] and
Metadata Model Expression Language (MEL) Specification [SVTA2031].
The following is an example of an MI.AllowCompress that allows
manifests (*.m3u8) to be compressed by the dCDN:
Siloniz & Goldstein Expires 11 January 2024 [Page 8]
Internet-Draft CDNI Edge Control Metadata July 2023
{
"match": {
"expression": "req.h.uri *= '*.m3u8'"
},
"stage-metadata": {
"generic-metadata": [
{
"generic-metadata-type": "MI.AllowCompress",
"generic-metadata-value": {
"allow-compress": true
}
}
]
}
}
The following is an example of an MI.AllowCompress that allows
manifests (*.m3u8) to be compressed by the dCDN but normalizes the
client’s Accept-Encoding header:
{
"match": {
"expression": "req.h.accept-encoding *= '*gzip*'"
},
"stage-metadata": {
"generic-metadata": [
{
"generic-metadata-type": "MI.AllowCompress",
"generic-metadata-value": {
"allow-compress": true
}
}
]
}
}
5. MI.ClientConnectionControl
Configuration metadata is required to define how connections against
a client are maintained by a dCDN. Since the clients are typically
owned/operated by a uCDN, giving this control to a uCDN allows it to
accommodate device-specific constraints and performance optimization.
A dCDN can also benefit from this configuration metadata to meet its
security and resource consumption requirements.
MI.ClientConnectionControl is a new GenericMetadata object that
specifies how a dCDN manages its connections to clients/players.
Siloniz & Goldstein Expires 11 January 2024 [Page 9]
Internet-Draft CDNI Edge Control Metadata July 2023
Property: connection-keep-alive-time-ms
- Description: Specifies the time, in milliseconds, to keep an
idle connection open.
- Type: Integer
- Mandatory-to-Specify: No. When not specified, a default value
selected by the dCDN will be used.
The following example shows how a connection setup and a keep alive
timeout can be set for client connections to a dCDN:
{
"generic-metadata-type": "MI.ClientConnectionControl",
"generic-metadata-value": {
"connection-keep-alive-time-ms": 3
}
}
6. Conclusion
This specification has defined configuration metadata objects related
to controlling edge access to resources via CDNs and Open Caching
systems. It has added to the set of basic CDNI configuration
metadata objects defined in [RFC8006], and can be extended in the
future with additional Edge Control Metadata object definitions.
7. Security Considerations
The FCI and MI objects defined in the present document are
transferred via the interfaces defined in CDNI [RFC8006]. [RFC8006]
describes how to secure these interfaces, protecting the integrity,
confidentiality and ensuring the authenticity of the dCDN and uCDN.
The security provide by [RFC8006] should therefore address the above
security concerns.
8. IANA Considerations
8.1. CDNI Payload Types
TBD.
Siloniz & Goldstein Expires 11 January 2024 [Page 10]
Internet-Draft CDNI Edge Control Metadata July 2023
9. Acknowledgements
The authors would like to express their gratitude to the members of
the Streaming Video Technology Alliance [SVTA] Open Caching Working
Group for their guidance / contribution / reviews ...)
Particulary the following people contribute in one or other way to
the content of this draft:
Guillaume Bichot - Broadpeak
Christoph Neumann - Broadpeak
Pankaj Chaudhari - Disney Streaming Services
Rajeev RK - picoNETS
Yoav Gressel - Qwilt
Arnon Warshavsky - QWilt
Shmuel Asafi . Qwilt
Nir Sopher - Qwilt
Arnon Warshavsky - Qwilt
Ben Rosenblum - Vecima
10. References
10.1. Normative References
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "HTTP Semantics", STD 97, RFC 9110,
DOI 10.17487/RFC9110, June 2022,
<https://www.rfc-editor.org/info/rfc9110>.
[RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma,
"Content Delivery Network Interconnection (CDNI)
Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016,
<https://www.rfc-editor.org/info/rfc8006>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
Siloniz & Goldstein Expires 11 January 2024 [Page 11]
Internet-Draft CDNI Edge Control Metadata July 2023
10.2. Informative References
[SVTA] "Streaming Video Technology Alliance Home Page",
<https://www.svta.org>.
[SVTA2032] Goldstein, G., Ed., Chaudhari, P., Power, W., Gressel, Y.,
and A. Warshavsky, "Processing Stages Metadata
Specification", 2 July 2021,
<https://svta.org/documents/SVTA2032>.
[SVTA2031] Goldstein, G., Ed., Chaudhari, P., Power, W., Gressel, Y.,
and A. Warshavsky, "Metadata Model Expression Language
(MEL) Specification", 2 July 2021,
<https://svta.org/documents/SVTA2031>.
Authors' Addresses
Alfonso Siloniz
Telefonica
Spain
Email: alfonsosiloniz@gmail.com
Glenn Goldstein
Lumen Technologies
United States of America
Email: glenng1215@gmail.com
Siloniz & Goldstein Expires 11 January 2024 [Page 12]