summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7838.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7838.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7838.txt')
-rw-r--r--doc/rfc/rfc7838.txt1123
1 files changed, 1123 insertions, 0 deletions
diff --git a/doc/rfc/rfc7838.txt b/doc/rfc/rfc7838.txt
new file mode 100644
index 0000000..e0f7280
--- /dev/null
+++ b/doc/rfc/rfc7838.txt
@@ -0,0 +1,1123 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) M. Nottingham
+Request for Comments: 7838 Akamai
+Category: Standards Track P. McManus
+ISSN: 2070-1721 Mozilla
+ J. Reschke
+ greenbytes
+ April 2016
+
+
+ HTTP Alternative Services
+
+Abstract
+
+ This document specifies "Alternative Services" for HTTP, which allow
+ an origin's resources to be authoritatively available at a separate
+ network location, possibly accessed with a different protocol
+ configuration.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7838.
+
+Copyright Notice
+
+ Copyright (c) 2016 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
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 1]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+Table of Contents
+
+ 1. Introduction ....................................................2
+ 1.1. Notational Conventions .....................................3
+ 2. Alternative Services Concepts ...................................3
+ 2.1. Host Authentication ........................................5
+ 2.2. Alternative Service Caching ................................6
+ 2.3. Requiring Server Name Indication ...........................6
+ 2.4. Using Alternative Services .................................6
+ 3. The Alt-Svc HTTP Header Field ...................................8
+ 3.1. Caching Alt-Svc Header Field Values .......................10
+ 4. The ALTSVC HTTP/2 Frame ........................................11
+ 5. The Alt-Used HTTP Header Field .................................13
+ 6. The 421 (Misdirected Request) HTTP Status Code .................13
+ 7. IANA Considerations ............................................13
+ 7.1. Header Field Registrations ................................13
+ 7.2. The ALTSVC HTTP/2 Frame Type ..............................14
+ 7.3. Alt-Svc Parameter Registry ................................14
+ 7.3.1. Procedure ..........................................14
+ 7.3.2. Registrations ......................................15
+ 8. Internationalization Considerations ............................15
+ 9. Security Considerations ........................................15
+ 9.1. Changing Ports ............................................15
+ 9.2. Changing Hosts ............................................15
+ 9.3. Changing Protocols ........................................16
+ 9.4. Tracking Clients Using Alternative Services ...............17
+ 9.5. Confusion regarding Request Scheme ........................17
+ 10. References ....................................................18
+ 10.1. Normative References .....................................18
+ 10.2. Informative References ...................................19
+ Acknowledgements ..................................................19
+ Authors' Addresses ................................................20
+
+1. Introduction
+
+ HTTP [RFC7230] conflates the identification of resources with their
+ location. In other words, "http://" and "https://" URIs are used to
+ both name and find things to interact with.
+
+ In some cases, it is desirable to separate identification and
+ location in HTTP; keeping the same identifier for a resource, but
+ interacting with it at a different location on the network.
+
+ For example:
+
+ o An origin server might wish to redirect a client to a different
+ server when it is under load, or it has found a server in a
+ location that is more local to the client.
+
+
+
+Nottingham, et al. Standards Track [Page 2]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ o An origin server might wish to offer access to its resources using
+ a new protocol, such as HTTP/2 [RFC7540], or one using improved
+ security, such as Transport Layer Security (TLS) [RFC5246].
+
+ o An origin server might wish to segment its clients into groups of
+ capabilities, such as those supporting Server Name Indication
+ (SNI) (Section 3 of [RFC6066]), for operational purposes.
+
+ This specification defines a new concept in HTTP, "Alternative
+ Services", that allows an origin server to nominate additional means
+ of interacting with it on the network. It defines a general
+ framework for this in Section 2, along with specific mechanisms for
+ advertising their existence using HTTP header fields (Section 3) or
+ HTTP/2 frames (Section 4), plus a way to indicate that an alternative
+ service was used (Section 5).
+
+ It also endorses the status code 421 (Misdirected Request)
+ (Section 6) that origin servers or their nominated alternatives can
+ use to indicate that they are not authoritative for a given origin,
+ in cases where the wrong location is used.
+
+1.1. Notational Conventions
+
+ 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].
+
+ This document uses the Augmented BNF defined in [RFC5234] and updated
+ by [RFC7405] along with the "#rule" extension defined in Section 7 of
+ [RFC7230]. The rules below are defined in [RFC5234], [RFC7230], and
+ [RFC7234]:
+
+ OWS = <OWS, see [RFC7230], Section 3.2.3>
+ delta-seconds = <delta-seconds; see [RFC7234], Section 1.2.1>
+ port = <port, see [RFC7230], Section 2.7>
+ quoted-string = <quoted-string, see [RFC7230], Section 3.2.6>
+ token = <token, see [RFC7230], Section 3.2.6>
+ uri-host = <uri-host, see [RFC7230], Section 2.7>
+
+2. Alternative Services Concepts
+
+ This specification defines a new concept in HTTP, the "Alternative
+ Service". When an origin [RFC6454] has resources that are accessible
+ through a different protocol/host/port combination, it is said to
+ have an alternative service available.
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 3]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ An alternative service can be used to interact with the resources on
+ an origin server at a separate location on the network, possibly
+ using a different protocol configuration. Alternative services are
+ considered authoritative for an origin's resources, in the sense of
+ [RFC7230], Section 9.1.
+
+ For example, an origin:
+
+ ("http", "www.example.com", "80")
+
+ might declare that its resources are also accessible at the
+ alternative service:
+
+ ("h2", "new.example.com", "81")
+
+ By their nature, alternative services are explicitly at the
+ granularity of an origin; they cannot be selectively applied to
+ resources within an origin.
+
+ Alternative services do not replace or change the origin for any
+ given resource; in general, they are not visible to the software
+ "above" the access mechanism. The alternative service is essentially
+ alternative routing information that can also be used to reach the
+ origin in the same way that DNS CNAME or SRV records define routing
+ information at the name resolution level. Each origin maps to a set
+ of these routes -- the default route is derived from the origin
+ itself and the other routes are introduced based on alternative-
+ service information.
+
+ Furthermore, it is important to note that the first member of an
+ alternative service tuple is different from the "scheme" component of
+ an origin; it is more specific, identifying not only the major
+ version of the protocol being used, but potentially the communication
+ options for that protocol as well.
+
+ This means that clients using an alternative service can change the
+ host, port, and protocol that they are using to fetch resources, but
+ these changes MUST NOT be propagated to the application that is using
+ HTTP; from that standpoint, the URI being accessed and all
+ information derived from it (scheme, host, and port) are the same as
+ before.
+
+ Importantly, this includes its security context; in particular, when
+ TLS [RFC5246] is used to authenticate, the alternative service will
+ need to present a certificate for the origin's host name, not that of
+ the alternative. Likewise, the Host header field ([RFC7230],
+ Section 5.4) is still derived from the origin, not the alternative
+ service (just as it would if a CNAME were being used).
+
+
+
+Nottingham, et al. Standards Track [Page 4]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ The changes MAY, however, be made visible in debugging tools,
+ consoles, etc.
+
+ Formally, an alternative service is identified by the combination of:
+
+ o An Application Layer Protocol Negotiation (ALPN) protocol name, as
+ per [RFC7301]
+
+ o A host, as per [RFC3986], Section 3.2.2
+
+ o A port, as per [RFC3986], Section 3.2.3
+
+ The ALPN protocol name is used to identify the application protocol
+ or suite of protocols used by the alternative service. Note that for
+ the purpose of this specification, an ALPN protocol name implicitly
+ includes TLS in the suite of protocols it identifies, unless
+ specified otherwise in its definition. In particular, the ALPN name
+ "http/1.1", registered by Section 6 of [RFC7301], identifies HTTP/1.1
+ over TLS.
+
+ Additionally, each alternative service MUST have a freshness
+ lifetime, expressed in seconds (see Section 2.2).
+
+ There are many ways that a client could discover the alternative
+ service(s) associated with an origin. This document describes two
+ such mechanisms: the "Alt-Svc" HTTP header field (Section 3) and the
+ "ALTSVC" HTTP/2 frame type (Section 4).
+
+ The remainder of this section describes requirements that are common
+ to alternative services, regardless of how they are discovered.
+
+2.1. Host Authentication
+
+ Clients MUST have reasonable assurances that the alternative service
+ is under control of and valid for the whole origin. This mitigates
+ the attack described in Section 9.2.
+
+ For the purposes of this document, "reasonable assurances" can be
+ established through use of a TLS-based protocol with the certificate
+ checks defined in [RFC2818]. Clients MAY impose additional criteria
+ for establishing reasonable assurances.
+
+ For example, if the origin's host is "www.example.com" and an
+ alternative is offered on "other.example.com" with the "h2" protocol,
+ and the certificate offered is valid for "www.example.com", the
+ client can use the alternative. However, if either is offered with
+ the "h2c" protocol, the client cannot use it, because there is no
+
+
+
+
+Nottingham, et al. Standards Track [Page 5]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ mechanism (at the time of the publication of this specification) in
+ that protocol to establish the relationship between the origin and
+ the alternative.
+
+2.2. Alternative Service Caching
+
+ Mechanisms for discovering alternative services also associate a
+ freshness lifetime with them; for example, the Alt-Svc header field
+ uses the "ma" parameter.
+
+ Clients can choose to use an alternative service instead of the
+ origin at any time when it is considered fresh; see Section 2.4 for
+ specific recommendations.
+
+ Clients with existing connections to an alternative service do not
+ need to stop using it when its freshness lifetime ends; the caching
+ mechanism is intended for limiting how long an alternative service
+ can be used for establishing new connections, not limiting the use of
+ existing ones.
+
+ Alternative services are fully authoritative for the origin in
+ question, including the ability to clear or update cached alternative
+ service entries, extend freshness lifetimes, and any other authority
+ the origin server would have.
+
+ When alternative services are used to send a client to the most
+ optimal server, a change in network configuration can result in
+ cached values becoming suboptimal. Therefore, clients SHOULD remove
+ from cache all alternative services that lack the "persist" flag with
+ the value "1" when they detect such a change, when information about
+ network state is available.
+
+2.3. Requiring Server Name Indication
+
+ A client MUST NOT use a TLS-based alternative service unless the
+ client supports TLS Server Name Indication (SNI). This supports the
+ conservation of IP addresses on the alternative service host.
+
+ Note that the SNI information provided in TLS by the client will be
+ that of the origin, not the alternative (as will the Host HTTP header
+ field value).
+
+2.4. Using Alternative Services
+
+ By their nature, alternative services are OPTIONAL: clients do not
+ need to use them. However, it is advantageous for clients to behave
+ in a predictable way when alternative services are used by servers,
+ to aid in purposes like load balancing.
+
+
+
+Nottingham, et al. Standards Track [Page 6]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ Therefore, if a client supporting this specification becomes aware of
+ an alternative service, the client SHOULD use that alternative
+ service for all requests to the associated origin as soon as it is
+ available, provided the alternative service information is fresh
+ (Section 2.2) and the security properties of the alternative service
+ protocol are desirable, as compared to the existing connection. A
+ viable alternative service is then treated in every way as the
+ origin; this includes the ability to advertise alternative services.
+
+ If a client becomes aware of multiple alternative services, it
+ chooses the most suitable according to its own criteria, keeping
+ security properties in mind. For example, an origin might advertise
+ multiple alternative services to notify clients of support for
+ multiple versions of HTTP.
+
+ A client configured to use a proxy for a given request SHOULD NOT
+ directly connect to an alternative service for this request, but
+ instead route it through that proxy.
+
+ When a client uses an alternative service for a request, it can
+ indicate this to the server using the Alt-Used header field
+ (Section 5).
+
+ The client does not need to block requests on any existing
+ connection; it can be used until the alternative connection is
+ established. However, if the security properties of the existing
+ connection are weak (for example, cleartext HTTP/1.1), then it might
+ make sense to block until the new connection is fully available in
+ order to avoid information leakage.
+
+ Furthermore, if the connection to the alternative service fails or is
+ unresponsive, the client MAY fall back to using the origin or another
+ alternative service. Note, however, that this could be the basis of
+ a downgrade attack, thus losing any enhanced security properties of
+ the alternative service. If the connection to the alternative
+ service does not negotiate the expected protocol (for example, ALPN
+ fails to negotiate h2, or an Upgrade request to h2c is not accepted),
+ the connection to the alternative service MUST be considered to have
+ failed.
+
+
+
+
+
+
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 7]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+3. The Alt-Svc HTTP Header Field
+
+ An HTTP(S) origin server can advertise the availability of
+ alternative services to clients by adding an Alt-Svc header field to
+ responses.
+
+ Alt-Svc = clear / 1#alt-value
+ clear = %s"clear"; "clear", case-sensitive
+ alt-value = alternative *( OWS ";" OWS parameter )
+ alternative = protocol-id "=" alt-authority
+ protocol-id = token ; percent-encoded ALPN protocol name
+ alt-authority = quoted-string ; containing [ uri-host ] ":" port
+ parameter = token "=" ( token / quoted-string )
+
+ The field value consists either of a list of values, each of which
+ indicates one alternative service, or the keyword "clear".
+
+ A field value containing the special value "clear" indicates that the
+ origin requests all alternatives for that origin to be invalidated
+ (including those specified in the same response, in case of an
+ invalid reply containing both "clear" and alternative services).
+
+ ALPN protocol names are octet sequences with no additional
+ constraints on format. Octets not allowed in tokens ([RFC7230],
+ Section 3.2.6) MUST be percent-encoded as per Section 2.1 of
+ [RFC3986]. Consequently, the octet representing the percent
+ character "%" (hex 25) MUST be percent-encoded as well.
+
+ In order to have precisely one way to represent any ALPN protocol
+ name, the following additional constraints apply:
+
+ 1. Octets in the ALPN protocol name MUST NOT be percent-encoded if
+ they are valid token characters except "%", and
+
+ 2. When using percent-encoding, uppercase hex digits MUST be used.
+
+ With these constraints, recipients can apply simple string comparison
+ to match protocol identifiers.
+
+ The "alt-authority" component consists of an OPTIONAL uri-host
+ ("host" in Section 3.2.2 of [RFC3986]), a colon (":"), and a port
+ number.
+
+ For example:
+
+ Alt-Svc: h2=":8000"
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 8]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ This indicates the "h2" protocol ([RFC7540]) on the same host using
+ the indicated port 8000.
+
+ An example involving a change of host:
+
+ Alt-Svc: h2="new.example.org:80"
+
+ This indicates the "h2" protocol on the host "new.example.org",
+ running on port 80. Note that the "quoted-string" syntax needs to be
+ used because ":" is not an allowed character in "token".
+
+ Examples for protocol name escaping:
+
+ +--------------------+-------------+---------------------+
+ | ALPN protocol name | protocol-id | Note |
+ +--------------------+-------------+---------------------+
+ | h2 | h2 | No escaping needed |
+ +--------------------+-------------+---------------------+
+ | w=x:y#z | w%3Dx%3Ay#z | "=" and ":" escaped |
+ +--------------------+-------------+---------------------+
+ | x%y | x%25y | "%" needs escaping |
+ +--------------------+-------------+---------------------+
+
+ Alt-Svc MAY occur in any HTTP response message, regardless of the
+ status code. Note that recipients of Alt-Svc can ignore the header
+ field (and are required to in some situations; see Sections 2.1 and
+ 6).
+
+ The Alt-Svc field value can have multiple values:
+
+ Alt-Svc: h2="alt.example.com:8000", h2=":443"
+
+ When multiple values are present, the order of the values reflects
+ the server's preference (with the first value being the most
+ preferred alternative).
+
+ The value(s) advertised by Alt-Svc can be used by clients to open a
+ new connection to an alternative service. Subsequent requests can
+ start using this new connection immediately or can continue using the
+ existing connection while the new connection is created.
+
+ When using HTTP/2 ([RFC7540]), servers SHOULD instead send an ALTSVC
+ frame (Section 4). A single ALTSVC frame can be sent for a
+ connection; a new frame is not needed for every request. Note that,
+ despite this recommendation, Alt-Svc header fields remain valid in
+ responses delivered over HTTP/2.
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 9]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ Each "alt-value" is followed by an OPTIONAL semicolon-separated list
+ of additional parameters, each such "parameter" comprising a name and
+ a value.
+
+ This specification defines two parameters: "ma" and "persist",
+ defined in Section 3.1. Unknown parameters MUST be ignored. That
+ is, the values (alt-value) they appear in MUST be processed as if the
+ unknown parameter was not present.
+
+ New parameters can be defined in extension specifications (see
+ Section 7.3 for registration details).
+
+ Note that all field elements that allow "quoted-string" syntax MUST
+ be processed as per Section 3.2.6 of [RFC7230].
+
+3.1. Caching Alt-Svc Header Field Values
+
+ When an alternative service is advertised using Alt-Svc, it is
+ considered fresh for 24 hours from generation of the message. This
+ can be modified with the "ma" (max-age) parameter.
+
+ Syntax:
+
+ ma = delta-seconds; see [RFC7234], Section 1.2.1
+
+ The delta-seconds value indicates the number of seconds since the
+ response was generated for which the alternative service is
+ considered fresh.
+
+ Alt-Svc: h2=":443"; ma=3600
+
+ See Section 4.2.3 of [RFC7234] for details on determining the
+ response age.
+
+ For example, a response:
+
+ HTTP/1.1 200 OK
+ Content-Type: text/html
+ Cache-Control: max-age=600
+ Age: 30
+ Alt-Svc: h2=":8000"; ma=60
+
+ indicates that an alternative service is available and usable for the
+ next 60 seconds. However, the response has already been cached for
+ 30 seconds (as per the Age header field value); therefore, the
+ alternative service is only fresh for the 30 seconds from when this
+ response was received, minus estimated transit time.
+
+
+
+
+Nottingham, et al. Standards Track [Page 10]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ Note that the freshness lifetime for HTTP caching (here, 600 seconds)
+ does not affect caching of Alt-Svc values.
+
+ When an Alt-Svc response header field is received from an origin, its
+ value invalidates and replaces all cached alternative services for
+ that origin.
+
+ By default, cached alternative services will be cleared when the
+ client detects a network change. Alternative services that are
+ intended to be longer lived (such as those that are not specific to
+ the client access network) can carry the "persist" parameter with a
+ value "1" as a hint that the service is potentially useful beyond a
+ network configuration change.
+
+ Syntax:
+
+ persist = "1"
+
+ For example:
+
+ Alt-Svc: h2=":443"; ma=2592000; persist=1
+
+ This specification only defines a single value for "persist".
+ Clients MUST ignore "persist" parameters with values other than "1".
+
+ See Section 2.2 for general requirements on caching alternative
+ services.
+
+4. The ALTSVC HTTP/2 Frame
+
+ The ALTSVC HTTP/2 frame ([RFC7540], Section 4) advertises the
+ availability of an alternative service to an HTTP/2 client.
+
+ The ALTSVC frame is a non-critical extension to HTTP/2. Endpoints
+ that do not support this frame will ignore it (as per the
+ extensibility rules defined in Section 4.1 of [RFC7540]).
+
+ An ALTSVC frame from a server to a client on a stream other than
+ stream 0 indicates that the conveyed alternative service is
+ associated with the origin of that stream.
+
+ An ALTSVC frame from a server to a client on stream 0 indicates that
+ the conveyed alternative service is associated with the origin
+ contained in the Origin field of the frame. An association with an
+ origin that the client does not consider authoritative for the
+ current connection MUST be ignored.
+
+ The ALTSVC frame type is 0xa (decimal 10).
+
+
+
+Nottingham, et al. Standards Track [Page 11]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ +-------------------------------+-------------------------------+
+ | Origin-Len (16) | Origin? (*) ...
+ +-------------------------------+-------------------------------+
+ | Alt-Svc-Field-Value (*) ...
+ +---------------------------------------------------------------+
+
+ ALTSVC Frame Payload
+
+ The ALTSVC frame contains the following fields:
+
+ Origin-Len: An unsigned, 16-bit integer indicating the length, in
+ octets, of the Origin field.
+
+ Origin: An OPTIONAL sequence of characters containing the ASCII
+ serialization of an origin ([RFC6454], Section 6.2) to which the
+ alternative service is applicable.
+
+ Alt-Svc-Field-Value: A sequence of octets (length determined by
+ subtracting the length of all preceding fields from the frame
+ length) containing a value identical to the Alt-Svc field value
+ defined in Section 3 (ABNF production "Alt-Svc").
+
+ The ALTSVC frame does not define any flags.
+
+ The ALTSVC frame is intended for receipt by clients. A device acting
+ as a server MUST ignore it.
+
+ An ALTSVC frame on stream 0 with empty (length 0) "Origin"
+ information is invalid and MUST be ignored. An ALTSVC frame on a
+ stream other than stream 0 containing non-empty "Origin" information
+ is invalid and MUST be ignored.
+
+ The ALTSVC frame is processed hop-by-hop. An intermediary MUST NOT
+ forward ALTSVC frames, though it can use the information contained in
+ ALTSVC frames in forming new ALTSVC frames to send to its own
+ clients.
+
+ Receiving an ALTSVC frame is semantically equivalent to receiving an
+ Alt-Svc header field. As a result, the ALTSVC frame causes
+ alternative services for the corresponding origin to be replaced.
+ Note that it would be unwise to mix the use of Alt-Svc header fields
+ with the use of ALTSVC frames, as the sequence of receipt might be
+ hard to predict.
+
+
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 12]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+5. The Alt-Used HTTP Header Field
+
+ The Alt-Used header field is used in requests to identify the
+ alternative service in use, just as the Host header field
+ (Section 5.4 of [RFC7230]) identifies the host and port of the
+ origin.
+
+ Alt-Used = uri-host [ ":" port ]
+
+ Alt-Used is intended to allow alternative services to detect loops,
+ differentiate traffic for purposes of load balancing, and generally
+ to ensure that it is possible to identify the intended destination of
+ traffic, since introducing this information after a protocol is in
+ use has proven to be problematic.
+
+ When using an alternative service, clients SHOULD include an Alt-Used
+ header field in all requests.
+
+ For example:
+
+ GET /thing HTTP/1.1
+ Host: origin.example.com
+ Alt-Used: alternate.example.net
+
+6. The 421 (Misdirected Request) HTTP Status Code
+
+ The 421 (Misdirected Request) status code is defined in Section 9.1.2
+ of [RFC7540] to indicate that the current server instance is not
+ authoritative for the requested resource. This can be used to
+ indicate that an alternative service is not authoritative; see
+ Section 2).
+
+ Clients receiving 421 (Misdirected Request) from an alternative
+ service MUST remove the corresponding entry from its alternative
+ service cache (see Section 2.2) for that origin. Regardless of the
+ idempotency of the request method, they MAY retry the request, either
+ at another alternative server, or at the origin.
+
+ An Alt-Svc header field in a 421 (Misdirected Request) response MUST
+ be ignored.
+
+7. IANA Considerations
+
+7.1. Header Field Registrations
+
+ HTTP header fields are registered within the "Message Headers"
+ registry maintained at <https://www.iana.org/assignments/message-
+ headers/>.
+
+
+
+Nottingham, et al. Standards Track [Page 13]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ This document defines the following HTTP header fields, so their
+ associated registry entries have been added according to the
+ permanent registrations below (see [BCP90]):
+
+ +-------------------+----------+----------+------------+
+ | Header Field Name | Protocol | Status | Reference |
+ +-------------------+----------+----------+------------+
+ | Alt-Svc | http | standard | Section 3 |
+ | Alt-Used | http | standard | Section 5 |
+ +-------------------+----------+----------+------------+
+
+ The change controller is: "IETF (iesg@ietf.org) -- Internet
+ Engineering Task Force".
+
+7.2. The ALTSVC HTTP/2 Frame Type
+
+ This document registers the ALTSVC frame type in the "HTTP/2 Frame
+ Type" registry ([RFC7540], Section 11.2).
+
+ Frame Type: ALTSVC
+
+ Code: 0xa
+
+ Specification: Section 4 of this document
+
+7.3. Alt-Svc Parameter Registry
+
+ The "Hypertext Transfer Protocol (HTTP) Alt-Svc Parameter Registry"
+ defines the name space for parameters. It has been created and will
+ be maintained at <http://www.iana.org/assignments/http-alt-svc-
+ parameters>.
+
+7.3.1. Procedure
+
+ A registration MUST include the following fields:
+
+ o Parameter Name
+
+ o Pointer to specification text
+
+ Values to be added to this name space require Expert Review (see
+ [RFC5226], Section 4.1).
+
+
+
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 14]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+7.3.2. Registrations
+
+ The "Hypertext Transfer Protocol (HTTP) Alt-Svc Parameter Registry"
+ has been populated with the registrations below:
+
+ +-------------------+--------------+
+ | Alt-Svc Parameter | Reference |
+ +-------------------+--------------+
+ | ma | Section 3.1 |
+ | persist | Section 3.1 |
+ +-------------------+--------------+
+
+8. Internationalization Considerations
+
+ An internationalized domain name that appears in either the header
+ field (Section 3) or the HTTP/2 frame (Section 4) MUST be expressed
+ using A-labels ([RFC5890], Section 2.3.2.1).
+
+9. Security Considerations
+
+9.1. Changing Ports
+
+ Using an alternative service implies accessing an origin's resources
+ on an alternative port, at a minimum. Therefore, an attacker that
+ can inject alternative services and listen at the advertised port is
+ able to hijack an origin. On certain servers, it is normal for users
+ to be able to control some personal pages available on a shared port
+ and also to accept requests on less-privileged ports.
+
+ For example, an attacker that can add HTTP response header fields to
+ some pages can redirect traffic for an entire origin to a different
+ port on the same host using the Alt-Svc header field; if that port is
+ under the attacker's control, they can thus masquerade as the HTTP
+ server.
+
+ This risk is mitigated by the requirements in Section 2.1.
+
+ On servers, this risk can also be reduced by restricting the ability
+ to advertise alternative services, and restricting who can open a
+ port for listening on that host.
+
+9.2. Changing Hosts
+
+ When the host is changed due to the use of an alternative service,
+ this presents an opportunity for attackers to hijack communication to
+ an origin.
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 15]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ For example, if an attacker can convince a user agent to send all
+ traffic for "innocent.example.org" to "evil.example.com" by
+ successfully associating it as an alternative service, they can
+ masquerade as that origin. This can be done locally (see mitigations
+ in Section 9.1) or remotely (e.g., by an intermediary as a man-in-
+ the-middle attack).
+
+ This is the reason for the requirement in Section 2.1 that clients
+ have reasonable assurances that the alternative service is under
+ control of and valid for the whole origin; for example, presenting a
+ certificate for the origin proves that the alternative service is
+ authorized to serve traffic for the origin.
+
+ Note that this assurance is only as strong as the method used to
+ authenticate the alternative service. In particular, when TLS
+ authentication is used to do so, there are well-known exploits to
+ make an attacker's certificate appear as legitimate.
+
+ Alternative services could be used to persist such an attack. For
+ example, an intermediary could man-in-the-middle TLS-protected
+ communication to a target and then direct all traffic to an
+ alternative service with a large freshness lifetime so that the user
+ agent still directs traffic to the attacker even when not using the
+ intermediary.
+
+ Implementations MUST perform any certificate-pinning validation (such
+ as [RFC7469]) on alternative services just as they would on direct
+ connections to the origin. Implementations might also choose to add
+ other requirements around which certificates are acceptable for
+ alternative services.
+
+9.3. Changing Protocols
+
+ When the ALPN protocol is changed due to the use of an alternative
+ service, the security properties of the new connection to the origin
+ can be different from that of the "normal" connection to the origin,
+ because the protocol identifier itself implies this.
+
+ For example, if an "https://" URI has a protocol advertised that does
+ not use some form of end-to-end encryption (most likely, TLS), this
+ violates the expectations for security that the URI scheme implies.
+ Therefore, clients cannot use alternative services blindly, but
+ instead evaluate the option(s) presented to ensure that security
+ requirements and expectations of specifications, implementations, and
+ end users are met.
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 16]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+9.4. Tracking Clients Using Alternative Services
+
+ Choosing an alternative service implies connecting to a new, server-
+ supplied host name. By using unique names, servers could conceivably
+ track client requests. Such tracking could follow users across
+ multiple networks, when the "persist" flag is used.
+
+ Clients that wish to prevent requests from being correlated can
+ decide not to use alternative services for multiple requests that
+ would not otherwise be allowed to be correlated.
+
+ In a user agent, any alternative service information MUST be removed
+ when origin-specific data is cleared (typically, when cookies
+ [RFC6265] are cleared).
+
+9.5. Confusion regarding Request Scheme
+
+ Some server-side HTTP applications make assumptions about security
+ based upon connection context; for example, equating being served
+ upon port 443 with the use of an "https://" URI and the various
+ security properties that implies.
+
+ This affects not only the security properties of the connection
+ itself, but also the state of the client at the other end of it; for
+ example, a Web browser treats "https://" URIs differently than
+ "http://" URIs in many ways, not just for purposes of protocol
+ handling.
+
+ Since one of the uses of Alternative Services is to allow a
+ connection to be migrated to a different protocol and port, these
+ applications can become confused about the security properties of a
+ given connection, sending information (for example, cookies and
+ content) that is intended for a secure context (such as an "https://"
+ URI) to a client that is not treating it as one.
+
+ This risk can be mitigated in servers by using the URI scheme
+ explicitly carried by the protocol (such as ":scheme" in HTTP/2 or
+ the "absolute form" of the request target in HTTP/1.1) as an
+ indication of security context, instead of other connection
+ properties ([RFC7540], Section 8.1.2.3 and [RFC7230], Section 5.3.2).
+
+ When the protocol does not explicitly carry the scheme (as is usually
+ the case for HTTP/1.1 over TLS), servers can mitigate this risk by
+ either assuming that all requests have an insecure context, or by
+ refraining from advertising alternative services for insecure schemes
+ (for example, HTTP).
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 17]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+10. References
+
+10.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <http://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
+ DOI 10.17487/RFC2818, May 2000,
+ <http://www.rfc-editor.org/info/rfc2818>.
+
+ [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, DOI 10.17487/RFC3986, January 2005,
+ <http://www.rfc-editor.org/info/rfc3986>.
+
+ [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
+ IANA Considerations Section in RFCs", BCP 26, RFC 5226,
+ DOI 10.17487/RFC5226, May 2008,
+ <http://www.rfc-editor.org/info/rfc5226>.
+
+ [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <http://www.rfc-editor.org/info/rfc5234>.
+
+ [RFC5890] Klensin, J., "Internationalized Domain Names for
+ Applications (IDNA): Definitions and Document Framework",
+ RFC 5890, DOI 10.17487/RFC5890, August 2010,
+ <http://www.rfc-editor.org/info/rfc5890>.
+
+ [RFC6066] Eastlake, D., "Transport Layer Security (TLS) Extensions:
+ Extension Definitions", RFC 6066, DOI 10.17487/RFC6066,
+ January 2011, <http://www.rfc-editor.org/info/rfc6066>.
+
+ [RFC6454] Barth, A., "The Web Origin Concept", RFC 6454,
+ DOI 10.17487/RFC6454, December 2011,
+ <http://www.rfc-editor.org/info/rfc6454>.
+
+ [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Message Syntax and Routing",
+ RFC 7230, DOI 10.17487/RFC7230, June 2014,
+ <http://www.rfc-editor.org/info/rfc7230>.
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 18]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+ [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching",
+ RFC 7234, DOI 10.17487/RFC7234, June 2014,
+ <http://www.rfc-editor.org/info/rfc7234>.
+
+ [RFC7301] Friedl, S., Popov, A., Langley, A., and S. Emile,
+ "Transport Layer Security (TLS) Application-Layer Protocol
+ Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301,
+ July 2014, <http://www.rfc-editor.org/info/rfc7301>.
+
+ [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF",
+ RFC 7405, DOI 10.17487/RFC7405, December 2014,
+ <http://www.rfc-editor.org/info/rfc7405>.
+
+ [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
+ Transfer Protocol version 2", RFC 7540,
+ DOI 10.17487/RFC7540, May 2015,
+ <http://www.rfc-editor.org/info/rfc7540>.
+
+10.2. Informative References
+
+ [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration
+ Procedures for Message Header Fields", BCP 90, RFC 3864,
+ September 2004, <http://www.rfc-editor.org/info/bcp90>.
+
+ [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
+ (TLS) Protocol Version 1.2", RFC 5246,
+ DOI 10.17487/RFC5246, August 2008,
+ <http://www.rfc-editor.org/info/rfc5246>.
+
+ [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
+ DOI 10.17487/RFC6265, April 2011,
+ <http://www.rfc-editor.org/info/rfc6265>.
+
+ [RFC7469] Evans, C., Palmer, C., and R. Sleevi, "Public Key Pinning
+ Extension for HTTP", RFC 7469, DOI 10.17487/RFC7469, April
+ 2015, <http://www.rfc-editor.org/info/rfc7469>.
+
+Acknowledgements
+
+ Thanks to Adam Langley, Bence Beky, Chris Lonvick, Eliot Lear, Erik
+ Nygren, Guy Podjarny, Herve Ruellan, Lucas Pardue, Martin Thomson,
+ Matthew Kerwin, Mike Bishop, Paul Hoffman, Richard Barnes, Richard
+ Bradbury, Stephen Farrell, Stephen Ludin, and Will Chan for their
+ feedback and suggestions.
+
+ The Alt-Svc header field was influenced by the design of the
+ Alternate-Protocol header field in SPDY.
+
+
+
+Nottingham, et al. Standards Track [Page 19]
+
+RFC 7838 HTTP Alternative Services April 2016
+
+
+Authors' Addresses
+
+ Mark Nottingham
+ Akamai
+
+ Email: mnot@mnot.net
+ URI: https://www.mnot.net/
+
+
+ Patrick McManus
+ Mozilla
+
+ Email: mcmanus@ducksong.com
+ URI: https://mozillians.org/u/pmcmanus/
+
+
+ Julian F. Reschke
+ greenbytes GmbH
+
+ Email: julian.reschke@greenbytes.de
+ URI: https://greenbytes.de/tech/webdav/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Nottingham, et al. Standards Track [Page 20]
+