| < draft-ietf-httpbis-alt-svc-02.txt | draft-ietf-httpbis-alt-svc-03.txt > | |||
|---|---|---|---|---|
| HTTPbis Working Group M. Nottingham | HTTPbis Working Group M. Nottingham | |||
| Internet-Draft Akamai | Internet-Draft Akamai | |||
| Intended status: Standards Track P. McManus | Intended status: Standards Track P. McManus | |||
| Expires: January 5, 2015 Mozilla | Expires: April 3, 2015 Mozilla | |||
| J. Reschke | J. Reschke | |||
| greenbytes | greenbytes | |||
| July 4, 2014 | September 30, 2014 | |||
| HTTP Alternative Services | HTTP Alternative Services | |||
| draft-ietf-httpbis-alt-svc-02 | draft-ietf-httpbis-alt-svc-03 | |||
| Abstract | Abstract | |||
| This document specifies "alternative services" for HTTP, which allow | This document specifies "alternative services" for HTTP, which allow | |||
| an origin's resources to be authoritatively available at a separate | an origin's resources to be authoritatively available at a separate | |||
| network location, possibly accessed with a different protocol | network location, possibly accessed with a different protocol | |||
| configuration. | configuration. | |||
| Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
| Discussion of this draft takes place on the HTTPBIS working group | Discussion of this draft takes place on the HTTPBIS working group | |||
| mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
| <https://lists.w3.org/Archives/Public/ietf-http-wg/>. | <https://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
| Working Group information can be found at | Working Group information can be found at | |||
| <https://tools.ietf.org/wg/httpbis/> and <http://httpwg.github.io/>; | <https://tools.ietf.org/wg/httpbis/> and <http://httpwg.github.io/>; | |||
| source code and issues list for tis draft can be found at | source code and issues list for this draft can be found at | |||
| <https://github.com/httpwg/http-extensions>. | <https://github.com/httpwg/http-extensions>. | |||
| The changes in this draft are summarized in Appendix A. | The changes in this draft are summarized in Appendix A. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 January 5, 2015. | This Internet-Draft will expire on April 3, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 | |||
| skipping to change at page 2, line 31 ¶ | skipping to change at page 2, line 31 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Alternative Services Concepts . . . . . . . . . . . . . . . . 4 | 2. Alternative Services Concepts . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Host Authentication . . . . . . . . . . . . . . . . . . . 5 | 2.1. Host Authentication . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Alternative Service Caching . . . . . . . . . . . . . . . 6 | 2.2. Alternative Service Caching . . . . . . . . . . . . . . . 6 | |||
| 2.3. Requiring Server Name Indication . . . . . . . . . . . . . 6 | 2.3. Requiring Server Name Indication . . . . . . . . . . . . . 6 | |||
| 2.4. Using Alternative Services . . . . . . . . . . . . . . . . 6 | 2.4. Using Alternative Services . . . . . . . . . . . . . . . . 6 | |||
| 3. The Alt-Svc HTTP Header Field . . . . . . . . . . . . . . . . 7 | 3. The Alt-Svc HTTP Header Field . . . . . . . . . . . . . . . . 7 | |||
| 3.1. Caching Alt-Svc Header Field Values . . . . . . . . . . . 9 | 3.1. Caching Alt-Svc Header Field Values . . . . . . . . . . . 9 | |||
| 4. The ALTSVC HTTP/2 Frame . . . . . . . . . . . . . . . . . . . 10 | 4. The ALTSVC HTTP/2 Frame . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. The Alt-Svc-Used HTTP Header Field . . . . . . . . . . . . . . 11 | 5. The Alt-Svc-Used HTTP Header Field . . . . . . . . . . . . . . 11 | |||
| 6. The 421 Not Authoritative HTTP Status Code . . . . . . . . . . 12 | 6. The 421 Not Authoritative HTTP Status Code . . . . . . . . . . 12 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7.1. Header Field Registrations . . . . . . . . . . . . . . . . 12 | 7.1. Header Field Registrations . . . . . . . . . . . . . . . . 12 | |||
| 7.2. The ALTSVC HTTP/2 Frame Type . . . . . . . . . . . . . . . 13 | 7.2. The ALTSVC HTTP/2 Frame Type . . . . . . . . . . . . . . . 13 | |||
| 8. Internationalization Considerations . . . . . . . . . . . . . 13 | 8. Internationalization Considerations . . . . . . . . . . . . . 13 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.1. Changing Ports . . . . . . . . . . . . . . . . . . . . . . 13 | 9.1. Changing Ports . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.2. Changing Hosts . . . . . . . . . . . . . . . . . . . . . . 13 | 9.2. Changing Hosts . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.3. Changing Protocols . . . . . . . . . . . . . . . . . . . . 14 | 9.3. Changing Protocols . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9.4. Tracking Clients Using Alternative Services . . . . . . . 14 | 9.4. Tracking Clients Using Alternative Services . . . . . . . 14 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 15 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . . 15 | 11.1. Normative References . . . . . . . . . . . . . . . . . . . 15 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . . 16 | 11.2. Informative References . . . . . . . . . . . . . . . . . . 16 | |||
| Appendix A. Change Log (to be removed by RFC Editor before | Appendix A. Change Log (to be removed by RFC Editor before | |||
| publication) . . . . . . . . . . . . . . . . . . . . 16 | publication) . . . . . . . . . . . . . . . . . . . . 16 | |||
| A.1. Since draft-nottingham-httpbis-alt-svc-05 . . . . . . . . 16 | A.1. Since draft-nottingham-httpbis-alt-svc-05 . . . . . . . . 16 | |||
| A.2. Since draft-ietf-httpbis-alt-svc-00 . . . . . . . . . . . 16 | A.2. Since draft-ietf-httpbis-alt-svc-00 . . . . . . . . . . . 16 | |||
| A.3. Since draft-ietf-httpbis-alt-svc-01 . . . . . . . . . . . 16 | A.3. Since draft-ietf-httpbis-alt-svc-01 . . . . . . . . . . . 16 | |||
| A.4. Since draft-ietf-httpbis-alt-svc-02 . . . . . . . . . . . 16 | ||||
| 1. Introduction | 1. Introduction | |||
| HTTP [RFC7230] conflates the identification of resources with their | HTTP [RFC7230] conflates the identification of resources with their | |||
| location. In other words, "http://" (and "https://") URLs are used | location. In other words, "http://" (and "https://") URLs are used | |||
| to both name and find things to interact with. | to both name and find things to interact with. | |||
| In some cases, it is desirable to separate these aspects; to be able | In some cases, it is desirable to separate these aspects; to be able | |||
| to keep the same identifier for a resource, but interact with it | to keep the same identifier for a resource, but interact with it | |||
| using a different location on the network. | using a different location on the network. | |||
| skipping to change at page 5, line 18 ¶ | skipping to change at page 5, line 18 ¶ | |||
| alternative. Likewise, the Host header field ([RFC7230], Section | alternative. Likewise, the Host header field ([RFC7230], Section | |||
| 5.4) is still derived from the origin, not the alternative service | 5.4) is still derived from the origin, not the alternative service | |||
| (just as it would if a CNAME were being used). | (just as it would if a CNAME were being used). | |||
| The changes MAY, however, be made visible in debugging tools, | The changes MAY, however, be made visible in debugging tools, | |||
| consoles, etc. | consoles, etc. | |||
| Formally, an alternative service is identified by the combination of: | Formally, an alternative service is identified by the combination of: | |||
| o An Application Layer Protocol Negotiation (ALPN) protocol, as per | o An Application Layer Protocol Negotiation (ALPN) protocol, as per | |||
| [ALPN] | [RFC7301] | |||
| o A host, as per [RFC3986], Section 3.2.2 | o A host, as per [RFC3986], Section 3.2.2 | |||
| o A port, as per [RFC3986], Section 3.2.3 | o A port, as per [RFC3986], Section 3.2.3 | |||
| Additionally, each alternative service MUST have: | Additionally, each alternative service MUST have: | |||
| o A freshness lifetime, expressed in seconds; see Section 2.2 | o A freshness lifetime, expressed in seconds; see Section 2.2 | |||
| There are many ways that a client could discover the alternative | There are many ways that a client could discover the alternative | |||
| skipping to change at page 6, line 21 ¶ | skipping to change at page 6, line 21 ¶ | |||
| Clients MAY choose to use an alternative service instead of the | Clients MAY choose to use an alternative service instead of the | |||
| origin at any time when it is considered fresh; see Section 2.4 for | origin at any time when it is considered fresh; see Section 2.4 for | |||
| specific recommendations. | specific recommendations. | |||
| Clients with existing connections to alternative services are not | Clients with existing connections to alternative services are not | |||
| needed to fall back to the origin when its freshness lifetime ends; | needed to fall back to the origin when its freshness lifetime ends; | |||
| i.e., the caching mechanism is intended for limiting how long an | i.e., the caching mechanism is intended for limiting how long an | |||
| alternative service can be used for establishing new requests, not | alternative service can be used for establishing new requests, not | |||
| limiting the use of existing ones. | limiting the use of existing ones. | |||
| To mitigate risks associated with caching compromised values (see | Clients ought to consider that changes in network configurations can | |||
| Section 9.2 for details), user agents SHOULD examine cached | result in suboptimal or compromised cached alternative services. | |||
| alternative services when they detect a change in network | ||||
| configuration, and remove any that could be compromised (for example, | ||||
| those whose association with the trust root is questionable). UAs | ||||
| that do not have a means of detecting network changes SHOULD place an | ||||
| upper bound on their lifetime. | ||||
| 2.3. Requiring Server Name Indication | 2.3. Requiring Server Name Indication | |||
| A client MUST only use a TLS-based alternative service if the client | A client MUST only use a TLS-based alternative service if the client | |||
| also supports TLS Server Name Indication (SNI). This supports the | also supports TLS Server Name Indication (SNI). This supports the | |||
| conservation of IP addresses on the alternative service host. | conservation of IP addresses on the alternative service host. | |||
| 2.4. Using Alternative Services | 2.4. Using Alternative Services | |||
| By their nature, alternative services are OPTIONAL: clients do not | By their nature, alternative services are OPTIONAL: clients do not | |||
| need to use them. However, it is advantageous for clients to behave | need to use them. However, it is advantageous for clients to behave | |||
| in a predictable way when they are used by servers (e.g., for load | in a predictable way when they are used by servers (e.g., for load | |||
| balancing). | balancing). | |||
| Therefore, if a client becomes aware of an alternative service, the | Therefore, if a client becomes aware of an alternative service, the | |||
| client SHOULD use that alternative service for all requests to the | client SHOULD use that alternative service for all requests to the | |||
| associated origin as soon as it is available, provided that the | associated origin as soon as it is available, provided that the | |||
| security properties of the alternative service protocol are | security properties of the alternative service protocol are | |||
| desirable, as compared to the existing connection. | desirable, as compared to the existing connection. | |||
| If a client becomes aware of multiple alternative services, it MAY | ||||
| choose the most suitable according to its own criteria (again, | ||||
| keeping security properties in mind). For example, an origin might | ||||
| advertise multiple alternative services to notify clients of support | ||||
| for multiple versions of HTTP; or, an alternative service might | ||||
| itself advertise an alternative. | ||||
| When a client uses an alternate service, it MUST emit the Alt-Svc- | When a client uses an alternate service, it MUST emit the Alt-Svc- | |||
| Used header field (Section 5) on every request using that alternate | Used header field (Section 5) on every request using that alternate | |||
| service. | service. | |||
| The client does not need to block requests; the origin's connection | The client does not need to block requests; the origin's connection | |||
| can be used until the alternative connection is established. | can be used until the alternative connection is established. | |||
| However, if the security properties of the existing connection are | However, if the security properties of the existing connection are | |||
| weak (e.g. cleartext HTTP/1.1) then it might make sense to block | weak (e.g. cleartext HTTP/1.1) then it might make sense to block | |||
| until the new connection is fully available in order to avoid | until the new connection is fully available in order to avoid | |||
| information leakage. | information leakage. | |||
| skipping to change at page 7, line 24 ¶ | skipping to change at page 7, line 26 ¶ | |||
| 3. The Alt-Svc HTTP Header Field | 3. The Alt-Svc HTTP Header Field | |||
| An HTTP(S) origin server can advertise the availability of | An HTTP(S) origin server can advertise the availability of | |||
| alternative services to clients by adding an Alt-Svc header field to | alternative services to clients by adding an Alt-Svc header field to | |||
| responses. | responses. | |||
| Alt-Svc = 1#( alternative *( OWS ";" OWS parameter ) ) | Alt-Svc = 1#( alternative *( OWS ";" OWS parameter ) ) | |||
| alternative = protocol-id "=" alt-authority | alternative = protocol-id "=" alt-authority | |||
| protocol-id = token ; percent-encoded ALPN protocol identifier | protocol-id = token ; percent-encoded ALPN protocol identifier | |||
| alt-authority = token / quoted-string | alt-authority = quoted-string ; containing [ uri-host ] ":" port | |||
| ; containing [ uri-host ] ":" port | ||||
| ALPN protocol names are octet sequences with no additional | ALPN protocol names are octet sequences with no additional | |||
| constraints on format. Octets not allowed in tokens ([RFC7230], | constraints on format. Octets not allowed in tokens ([RFC7230], | |||
| Section 3.2.6) MUST be percent-encoded as per Section 2.1 of | Section 3.2.6) MUST be percent-encoded as per Section 2.1 of | |||
| [RFC3986]. Consequently, the octet representing the percent | [RFC3986]. Consequently, the octet representing the percent | |||
| character "%" (hex 25) MUST be percent-encoded as well. | character "%" (hex 25) MUST be percent-encoded as well. | |||
| In order to have precisely one way to represent any ALPN protocol | In order to have precisely one way to represent any ALPN protocol | |||
| name, the following additional constraints apply: | name, the following additional constraints apply: | |||
| skipping to change at page 8, line 7 ¶ | skipping to change at page 8, line 7 ¶ | |||
| With these constraints, recipients can apply simple string comparison | With these constraints, recipients can apply simple string comparison | |||
| to match protocol identifiers. | to match protocol identifiers. | |||
| The "alt-authority" component consists of an OPTIONAL uri-host | The "alt-authority" component consists of an OPTIONAL uri-host | |||
| ("host" in Section 3.2.2 of [RFC3986]), a colon (":"), and a port | ("host" in Section 3.2.2 of [RFC3986]), a colon (":"), and a port | |||
| number. | number. | |||
| For example: | For example: | |||
| Alt-Svc: http2=":8000" | Alt-Svc: h2=":8000" | |||
| This indicates the "http2" protocol on the same host using the | This indicates the "h2" protocol ([HTTP2]) on the same host using the | |||
| indicated port 8000. | indicated port 8000. | |||
| An example involving a change of host: | An example involving a change of host: | |||
| Alt-Svc: http2="new.example.org:80" | Alt-Svc: h2="new.example.org:80" | |||
| This indicates the "http2" protocol on the host "new.example.org", | This indicates the "h2" protocol on the host "new.example.org", | |||
| running on port 80. Note that the "quoted-string" syntax needs to be | running on port 80. Note that the "quoted-string" syntax needs to be | |||
| used when a host is specified in addition to a port (":" is not an | used because ":" is not an allowed character in "token". | |||
| allowed character in "token"). | ||||
| Examples for protocol name escaping: | Examples for protocol name escaping: | |||
| +--------------------+-------------+---------------------+ | +--------------------+-------------+---------------------+ | |||
| | ALPN protocol name | protocol-id | Note | | | ALPN protocol name | protocol-id | Note | | |||
| +--------------------+-------------+---------------------+ | +--------------------+-------------+---------------------+ | |||
| | http2 | http2 | No escaping needed | | | h2 | h2 | No escaping needed | | |||
| +--------------------+-------------+---------------------+ | +--------------------+-------------+---------------------+ | |||
| | w=x:y#z | w%3Dx%3Ay#z | "=" and ":" escaped | | | w=x:y#z | w%3Dx%3Ay#z | "=" and ":" escaped | | |||
| +--------------------+-------------+---------------------+ | +--------------------+-------------+---------------------+ | |||
| | x%y | x%25y | "%" needs escaping | | | x%y | x%25y | "%" needs escaping | | |||
| +--------------------+-------------+---------------------+ | +--------------------+-------------+---------------------+ | |||
| Alt-Svc MAY occur in any HTTP response message, regardless of the | Alt-Svc MAY occur in any HTTP response message, regardless of the | |||
| status code. | status code. | |||
| Alt-Svc does not allow advertisement of alternative services on other | ||||
| hosts, to protect against various header-based attacks. | ||||
| It can, however, have multiple values: | It can, however, have multiple values: | |||
| Alt-Svc: h2c=":8000", h2=":443" | Alt-Svc: h2c=":8000", h2=":443" | |||
| The value(s) advertised by Alt-Svc can be used by clients to open a | The value(s) advertised by Alt-Svc can be used by clients to open a | |||
| new connection to one or more alternative services immediately, or | new connection to one or more alternative services immediately, or | |||
| simultaneously with subsequent requests on the same connection. | simultaneously with subsequent requests on the same connection. | |||
| To reduce the ability of servers to track individual clients over | To reduce the ability of servers to track individual clients over | |||
| time (see Section 9.4), an alternative service indication sent by a | time (see Section 9.4), an alternative service indication sent by a | |||
| client SHOULD NOT include any alternative service information other | client SHOULD NOT include any alternative service information other | |||
| than the protocol, host and port. | than the protocol, host and port. | |||
| When using HTTP/2 ([HTTP2]), clients SHOULD instead send an ALTSVC | When using HTTP/2 ([HTTP2]), servers SHOULD instead send an ALTSVC | |||
| frame. A single ALTSVC frame can be sent for a connection; a new | frame (Section 4). A single ALTSVC frame can be sent for a | |||
| frame is not needed for every request. | connection; a new frame is not needed for every request. | |||
| Note that all field elements that allow "quoted-string" syntax MUST | Note that all field elements that allow "quoted-string" syntax MUST | |||
| be processed as per Section 3.2.6 of [RFC7230]. | be processed as per Section 3.2.6 of [RFC7230]. | |||
| 3.1. Caching Alt-Svc Header Field Values | 3.1. Caching Alt-Svc Header Field Values | |||
| When an alternative service is advertised using Alt-Svc, it is | When an alternative service is advertised using Alt-Svc, it is | |||
| considered fresh for 24 hours from generation of the message. This | considered fresh for 24 hours from generation of the message. This | |||
| can be modified with the 'ma' (max-age) parameter; | can be modified with the 'ma' (max-age) parameter; | |||
| skipping to change at page 11, line 18 ¶ | skipping to change at page 11, line 14 ¶ | |||
| Host-Len: An unsigned, 8-bit integer indicating the length, in | Host-Len: An unsigned, 8-bit integer indicating the length, in | |||
| octets, of the Host header field. | octets, of the Host header field. | |||
| Host: A sequence of characters (length determined by "Host-Len") | Host: A sequence of characters (length determined by "Host-Len") | |||
| containing an ASCII string indicating the host that the | containing an ASCII string indicating the host that the | |||
| alternative service is available upon. | alternative service is available upon. | |||
| Origin: An OPTIONAL sequence of characters (length determined by | Origin: An OPTIONAL sequence of characters (length determined by | |||
| subtracting the length of all preceding fields from the frame | subtracting the length of all preceding fields from the frame | |||
| length) containing the ASCII serialisation of an origin | length) containing the ASCII serialization of an origin | |||
| ([RFC6454], Section 6.2) that the alternate service is applicable | ([RFC6454], Section 6.2) that the alternate service is applicable | |||
| to. | to. | |||
| The ALTSVC frame does not define any flags. | The ALTSVC frame does not define any flags. | |||
| The ALTSVC frame is intended for receipt by clients; a server that | The ALTSVC frame is intended for receipt by clients; a server that | |||
| receives an ALTSVC frame MUST treat it as a connection error of type | receives an ALTSVC frame MUST treat it as a connection error of type | |||
| PROTOCOL_ERROR. | PROTOCOL_ERROR. | |||
| The ALTSVC frame is processed hop-by-hop. An intermediary MUST NOT | The ALTSVC frame is processed hop-by-hop. An intermediary MUST NOT | |||
| forward ALTSVC frames, though it can use the information contained in | forward ALTSVC frames, though it can use the information contained in | |||
| ALTSVC frames in forming new ALTSVC frames to send to its own | ALTSVC frames in forming new ALTSVC frames to send to its own | |||
| clients. | clients. | |||
| 5. The Alt-Svc-Used HTTP Header Field | 5. The Alt-Svc-Used HTTP Header Field | |||
| The Alt-Svc-Used HTTP header field is used in requests to indicate | The Alt-Svc-Used HTTP header field is used in requests to indicate | |||
| that an alternate service is in use. | that an alternate service is in use. | |||
| Alt-Svc-Used = ("1" / "0") *( OWS ";" OWS Alt-Svc-Used-Ext ) | Alt-Svc-Used = use-flag *( OWS ";" OWS ext-param ) | |||
| Alt-Svc-Used-Ext = token "=" ( token / quoted-string ) | use-flag = "1" / "0" | |||
| ext-param = token "=" ( token / quoted-string ) | ||||
| Alt-Svc-Used is intended to allow alternate services to avoid sending | Alt-Svc-Used is intended to allow alternate services to avoid sending | |||
| alternative service indications where there is a risk of generating a | alternative service indications where there is a risk of generating a | |||
| loops. It also allows a service to identify requests for accounting | loops. It also allows a service to identify requests for accounting | |||
| and load balancing purposes. | and load balancing purposes. | |||
| When using an alternative service, clients MUST include a Alt-Svc- | When using an alternative service, clients MUST include a Alt-Svc- | |||
| Used header field in all requests. | Used header field in all requests. | |||
| A flag value of "1" indicates that an alternate service was used, | ||||
| while "0" means it was not. | ||||
| For example: | For example: | |||
| GET /thing HTTP/1.1 | GET /thing HTTP/1.1 | |||
| Host: origin.example.com | Host: origin.example.com | |||
| Alt-Svc-Used: 1 | Alt-Svc-Used: 1 | |||
| The extension parameters (Alt-Svc-Used-Ext) are reserved for future | The extension parameters (ext-param) are reserved for future use; | |||
| use; specifications that want to define an extension will need to | specifications that want to define an extension will need to update | |||
| update this document (and ought to introduce an extension registry). | this document (and ought to introduce an extension registry). | |||
| 6. The 421 Not Authoritative HTTP Status Code | 6. The 421 Not Authoritative HTTP Status Code | |||
| The 421 (Not Authoritative) status code is defined in [HTTP2], | The 421 (Not Authoritative) status code is defined in [HTTP2], | |||
| Section 9.1.2 to indicate that the current server instance is not | Section 9.1.2 to indicate that the current server instance is not | |||
| authoritative for the requested resource. This can be used to | authoritative for the requested resource. This can be used to | |||
| indicate that an alternative service is not authoritative; see | indicate that an alternative service is not authoritative; see | |||
| Section 2). | Section 2). | |||
| Clients receiving 421 (Not Authoritative) from an alternative service | Clients receiving 421 (Not Authoritative) from an alternative service | |||
| skipping to change at page 14, line 23 ¶ | skipping to change at page 14, line 23 ¶ | |||
| known exploits to make an attacker's certificate appear as | known exploits to make an attacker's certificate appear as | |||
| legitimate. | legitimate. | |||
| Alternative services could be used to persist such an attack; for | Alternative services could be used to persist such an attack; for | |||
| example, an intermediary could man-in-the-middle TLS-protected | example, an intermediary could man-in-the-middle TLS-protected | |||
| communication to a target, and then direct all traffic to an | communication to a target, and then direct all traffic to an | |||
| alternative service with a large freshness lifetime, so that the user | alternative service with a large freshness lifetime, so that the user | |||
| agent still directs traffic to the attacker even when not using the | agent still directs traffic to the attacker even when not using the | |||
| intermediary. | intermediary. | |||
| As a result, there is a requirement in Section 2.2 to examine cached | ||||
| alternative services when a network change is detected. | ||||
| 9.3. Changing Protocols | 9.3. Changing Protocols | |||
| When the ALPN protocol is changed due to the use of an alternative | When the ALPN protocol is changed due to the use of an alternative | |||
| service, the security properties of the new connection to the origin | service, the security properties of the new connection to the origin | |||
| can be different from that of the "normal" connection to the origin, | can be different from that of the "normal" connection to the origin, | |||
| because the protocol identifier itself implies this. | because the protocol identifier itself implies this. | |||
| For example, if a "https://" URI had a protocol advertised that does | For example, if a "https://" URI had a protocol advertised that does | |||
| not use some form of end-to-end encryption (most likely, TLS), it | not use some form of end-to-end encryption (most likely, TLS), it | |||
| violates the expectations for security that the URI scheme implies. | violates the expectations for security that the URI scheme implies. | |||
| skipping to change at page 15, line 11 ¶ | skipping to change at page 15, line 7 ¶ | |||
| Clients that do not wish to be tracked MAY choose to ignore | Clients that do not wish to be tracked MAY choose to ignore | |||
| alternative service advertisements. | alternative service advertisements. | |||
| In a browser, any alternative service information MUST be removed | In a browser, any alternative service information MUST be removed | |||
| when origin-specific data is cleared (for instance, when cookies are | when origin-specific data is cleared (for instance, when cookies are | |||
| cleared). | cleared). | |||
| 10. Acknowledgements | 10. Acknowledgements | |||
| Thanks to Eliot Lear, Stephen Farrell, Guy Podjarny, Stephen Ludin, | Thanks to Adam Langley, Eliot Lear, Erik Nygren, Guy Podjarny, Paul | |||
| Erik Nygren, Paul Hoffman, Adam Langley, Will Chan and Richard Barnes | Hoffman, Richard Barnes, Stephen Farrell, Stephen Ludin, and Will | |||
| for their feedback and suggestions. | Chan for their feedback and suggestions. | |||
| The Alt-Svc header field was influenced by the design of the | The Alt-Svc header field was influenced by the design of the | |||
| Alternate-Protocol header field in SPDY. | Alternate-Protocol header field in SPDY. | |||
| 11. References | 11. References | |||
| 11.1. Normative References | 11.1. Normative References | |||
| [ALPN] Friedl, S., Popov, A., Langley, A., and S. Emile, | ||||
| "Transport Layer Security (TLS) Application Layer Protocol | ||||
| Negotiation Extension", draft-ietf-tls-applayerprotoneg-05 | ||||
| (work in progress), March 2014. | ||||
| [HTTP2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [HTTP2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol version 2", draft-ietf-httpbis-http2-13 | Transfer Protocol version 2", draft-ietf-httpbis-http2-14 | |||
| (work in progress), June 2014. | (work in progress), July 2014. | |||
| [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. | |||
| [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, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| skipping to change at page 16, line 10 ¶ | skipping to change at page 15, line 50 ¶ | |||
| December 2011. | December 2011. | |||
| [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
| RFC 7230, June 2014. | RFC 7230, June 2014. | |||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
| RFC 7234, June 2014. | RFC 7234, June 2014. | |||
| [RFC7301] Friedl, S., Popov, A., Langley, A., and S. Emile, | ||||
| "Transport Layer Security (TLS) Application-Layer Protocol | ||||
| Negotiation Extension", RFC 7301, July 2014. | ||||
| 11.2. Informative References | 11.2. Informative References | |||
| [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| September 2004. | September 2004. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
| Appendix A. Change Log (to be removed by RFC Editor before publication) | Appendix A. Change Log (to be removed by RFC Editor before publication) | |||
| skipping to change at page 17, line 5 ¶ | skipping to change at page 16, line 47 ¶ | |||
| Note that ALTSVC frame is preferred to Alt-Svc header field | Note that ALTSVC frame is preferred to Alt-Svc header field | |||
| (<https://github.com/http2/http2-spec/pull/503>). | (<https://github.com/http2/http2-spec/pull/503>). | |||
| Incorporate ALTSRV frame | Incorporate ALTSRV frame | |||
| (<https://github.com/http2/http2-spec/pull/507>). | (<https://github.com/http2/http2-spec/pull/507>). | |||
| Moved definition of status code 421 to HTTP/2. | Moved definition of status code 421 to HTTP/2. | |||
| Partly resolved <https://github.com/httpwg/http-extensions/issues/5>. | Partly resolved <https://github.com/httpwg/http-extensions/issues/5>. | |||
| A.4. Since draft-ietf-httpbis-alt-svc-02 | ||||
| Updated ALPN reference. | ||||
| Resolved <https://github.com/httpwg/http-extensions/issues/2>. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Mark Nottingham | Mark Nottingham | |||
| Akamai | Akamai | |||
| EMail: mnot@mnot.net | EMail: mnot@mnot.net | |||
| URI: https://www.mnot.net/ | URI: https://www.mnot.net/ | |||
| Patrick McManus | Patrick McManus | |||
| Mozilla | Mozilla | |||
| End of changes. 29 change blocks. | ||||
| 48 lines changed or deleted | 52 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||