Internet-Draft Alt-Svc Extension Unsupported July 2020
Pardue Expires 14 January 2021 [Page]
Workgroup:
HTTP
Internet-Draft:
draft-pardue-alt-svc-ext-unsupported-00
Published:
Intended Status:
Standards Track
Expires:
Author:
L. Pardue
Cloudflare

HTTP Alternative Services That Do Not Support Desired Extensions

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/.

Source for this draft and an issue tracker can be found at 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.

Table of Contents

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.

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.

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

[HTTP2]
Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext Transfer Protocol Version 2 (HTTP/2)", RFC 7540, DOI 10.17487/RFC7540, , <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, , <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, , <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, , <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, , <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