Internet DRAFT - draft-pardue-alt-svc-ext-unsupported
draft-pardue-alt-svc-ext-unsupported
HTTP L. Pardue
Internet-Draft Cloudflare
Intended status: Standards Track 13 July 2020
Expires: 14 January 2021
HTTP Alternative Services That Do Not Support Desired Extensions
draft-pardue-alt-svc-ext-unsupported-00
Abstract
This document describes an error case when an HTTP Alternative
Service does not support the extension points of the original
connection. It defines an error code that can be used by endpoints
to signal the encounter.
Discussion Venues
This note is to be removed before publishing as an RFC.
Discussion of this document takes place on the ALT Working Group
mailing list (alt@ietf.org), which is archived at
https://mailarchive.ietf.org/arch/browse/alt/
(https://mailarchive.ietf.org/arch/browse/alt/).
Source for this draft and an issue tracker can be found at
https://github.com/LPardue/draft-pardue-alt-svc-ext-unsupported
(https://github.com/LPardue/draft-pardue-alt-svc-ext-unsupported).
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 14 January 2021.
Pardue Expires 14 January 2021 [Page 1]
Internet-Draft Alt-Svc Extension Unsupported July 2020
Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved.
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 Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
3. Detecting and Signalling . . . . . . . . . . . . . . . . . . 3
4. HTTP/2 Error Code . . . . . . . . . . . . . . . . . . . . . . 4
5. HTTP/3 Error Code . . . . . . . . . . . . . . . . . . . . . . 4
6. Security Considerations . . . . . . . . . . . . . . . . . . . 4
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 4
8.1. Normative References . . . . . . . . . . . . . . . . . . 4
8.2. Informative References . . . . . . . . . . . . . . . . . 5
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 5
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 5
1. Introduction
HTTP/2 ([HTTP2]) and HTTP/3 ([HTTP3]) provide several extension
points, only some of which require negotiation before use. For any
HTTP connection that is actively using extensions, it is possible
that the server might advertise an Alternative Service ([ALT-SVC])
that contains no indication of whether the current extension points
are supported by indicated server. A client has to proactively
engage with the Alternative in order to determine what extension
points it supports, which will often require the client to establish
a new transport-layer connection and HTTP handshake. The client
might determine that the Alternative does not support the same
extensions as the current connection and decide to close the
connection. For an extension that is negotiated via SETTINGS frames,
the client might be able to detect the lack of extensions early in
the lifecycle. For other forms of extension, the problem might not
be detectable until later on, for instance when extension frame
exchanges fail.
Pardue Expires 14 January 2021 [Page 2]
Internet-Draft Alt-Svc Extension Unsupported July 2020
The guidance in [ALT-SVC] has lead to clients that are robust to
different types of failures. Following a "make-before-break"
approach avoids active transfers being interupted by an opportunistic
change in connection. As such, testing an Alternative and finding
that its extension points are incompatible is unlikely to be a hard
failure cases. However, Alt-Svc is the primary method of switching
between HTTP/2 and HTTP/3 and there is a possibility that extensions
offered in one version of a connection are not provided in another.
It is also feasible that support for extension points are not
unilaterally deployed across a fleet of servers, whether in the same
organization domain or not. A client might encounter problems with
the Alternative due to permanent error or transient erro due to
synchronization or coordination issues between the origin and the
Alternative.
Advertising Alternative Services has quite a low barrier and does
require up front coordination, meaning it is quite easy for an origin
administrator to configure things that are logically invalid.
Alternatives can detect problems and take action; [ALT-SVC] defines
status 421 Misdirected Request that allows the Alternative to signal
such a problem. However, there is are cases where clients will be
misdirected to Alternatives that cannot satisfy the extension
expectations of the client. A server that detects this issue can
either close the connection or degrade into a mode that does not use
the extension.
This document defines an error code for HTTP/2 and HTTP/3 that can be
sent by an endpoint when closing streams or connections due to a
failure with extenstion expectations. This clearly disambiguates the
failure case from other types, i.e. general protocol error, which can
allow the peer to take more specific meaures, such as identifying
configuration errors.
2. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
3. Detecting and Signalling
HTTP/2 and HTTP/3 endpoints might use various means to detect that a
desired extension is not supported on the connection, no specific
measures are prescribed by this document.
Pardue Expires 14 January 2021 [Page 3]
Internet-Draft Alt-Svc Extension Unsupported July 2020
When an endpoint detects that a desired extension is unsupported it
MAY terminate a stream or a connection with the error code
EXTENSION_UNSUPPORTED or H3_EXTENSION_UNSUPPORTED.
4. HTTP/2 Error Code
EXTENSION_UNSUPPORTED (0xf10): The endpoint detected that its peer
wants to use an extension that is not locally supported, or the peer
does not support an extension that is desired.
5. HTTP/3 Error Code
H3_EXTENSION_UNSUPPORTED (0x1f10): The endpoint detected that its
peer wants to use an extension that is not locally supported, or the
peer does not support an extension that is desired.
6. Security Considerations
None, probably.
7. IANA Considerations
This specification registers the following entry in the HTTP/2 Error
Code registry established by [HTTP2]:
Name: EXTENSION_UNSUPPORTED
Code: 0xf10
Description: Extension unsupported
Specification: This document
This specification registers the following entry in the HTTP/3 Error
Code registry established by [HTTP3]:
Name: EXTENSION_UNSUPPORTED
Code: 0x1f10
Description: Extension unsupported
Specification: This document
8. References
8.1. Normative References
Pardue Expires 14 January 2021 [Page 4]
Internet-Draft Alt-Svc Extension Unsupported July 2020
[HTTP2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
Transfer Protocol Version 2 (HTTP/2)", RFC 7540,
DOI 10.17487/RFC7540, May 2015,
<https://www.rfc-editor.org/info/rfc7540>.
[HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3
(HTTP/3)", Work in Progress, Internet-Draft, draft-ietf-
quic-http-29, 9 June 2020, <http://www.ietf.org/internet-
drafts/draft-ietf-quic-http-29.txt>.
[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>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
8.2. Informative References
[ALT-SVC] Nottingham, M., McManus, P., and J. Reschke, "HTTP
Alternative Services", RFC 7838, DOI 10.17487/RFC7838,
April 2016, <https://www.rfc-editor.org/info/rfc7838>.
Acknowledgments
Patrick McManus, Mike Bishop and Ryan Hamilton shared some opinions
on the error cases of Alt-Svc, in various channels, that have been
incorporated into this document.
Author's Address
Lucas Pardue
Cloudflare
Email: lucaspardue.24.7@gmail.com
Pardue Expires 14 January 2021 [Page 5]