HTTP Client Hints
RFC 8942
Document | Type | RFC - Experimental (February 2021; No errata) | |
---|---|---|---|
Authors | Ilya Grigorik , Yoav Weiss | ||
Last updated | 2021-02-08 | ||
Replaces | draft-grigorik-http-client-hints | ||
Stream | Internent Engineering Task Force (IETF) | ||
Formats | plain text html xml pdf htmlized (tools) htmlized bibtex | ||
Reviews | |||
Stream | WG state | Submitted to IESG for Publication (wg milestone: - Submit Client Hints... ) | |
Document shepherd | Mark Nottingham | ||
Shepherd write-up | Show (last changed 2020-04-09) | ||
IESG | IESG state | RFC 8942 (Experimental) | |
Action Holders |
(None)
|
||
Consensus Boilerplate | Yes | ||
Telechat date | |||
Responsible AD | Barry Leiba | ||
Send notices to | "Mark Nottingham" <mnot@mnot.net> | ||
IANA | IANA review state | IANA OK - Actions Needed | |
IANA action state | RFC-Ed-Ack | ||
IANA expert review state | Reviews assigned |
Internet Engineering Task Force (IETF) I. Grigorik Request for Comments: 8942 Y. Weiss Category: Experimental Google ISSN: 2070-1721 February 2021 HTTP Client Hints Abstract HTTP defines proactive content negotiation to allow servers to select the appropriate response for a given request, based upon the user agent's characteristics, as expressed in request headers. In practice, user agents are often unwilling to send those request headers, because it is not clear whether they will be used, and sending them impacts both performance and privacy. This document defines an Accept-CH response header that servers can use to advertise their use of request headers for proactive content negotiation, along with a set of guidelines for the creation of such headers, colloquially known as "Client Hints." Status of This Memo This document is not an Internet Standards Track specification; it is published for examination, experimental implementation, and evaluation. This document defines an Experimental Protocol for the Internet community. 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). Not all documents approved by the IESG are candidates for any level of Internet Standard; see Section 2 of RFC 7841. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8942. Copyright Notice Copyright (c) 2021 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 1.1. Notational Conventions 2. Client Hints Request Header Fields 2.1. Sending Client Hints 2.2. Server Processing of Client Hints 3. Advertising Server Support 3.1. The Accept-CH Response Header Field 3.2. Interaction with Caches 4. Security Considerations 4.1. Information Exposure 4.2. Deployment and Security Risks 4.3. Abuse Detection 5. Cost of Sending Hints 6. IANA Considerations 6.1. Accept-CH 7. References 7.1. Normative References 7.2. Informative References Acknowledgements Authors' Addresses 1. Introduction There are thousands of different devices accessing the web, each with different device capabilities and preference information. These device capabilities include hardware and software characteristics, as well as dynamic user and user agent preferences. Historically, applications that wanted the server to optimize content delivery and user experience based on such capabilities had to rely on passive identification (e.g., by matching the User-Agent header field (Section 5.5.3 of [RFC7231]) against an established database of user agent signatures), use HTTP cookies [RFC6265] and URL parameters, or use some combination of these and similar mechanisms to enable ad hoc content negotiation. Such techniques are expensive to set up and maintain and are not portable across both applications and servers. They also make it hard for both user agent and server to understand which data are required and are in use during the negotiation: * User agent detection cannot reliably identify all static variables, cannot infer dynamic user agent preferences, requires an external device database, is not cache friendly, and is reliant on a passive fingerprinting surface. * Cookie-based approaches are not portable across applications and servers, impose additional client-side latency by requiring JavaScript execution, and are not cache friendly. * URL parameters, similar to cookie-based approaches, suffer from lack of portability and are hard to deploy due to a requirement to encode content negotiation data inside of the URL of each resource. Proactive content negotiation (Section 3.4.1 of [RFC7231]) offers an alternative approach; user agents use specified, well-defined request headers to advertise their capabilities and characteristics, so thatShow full document text