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 that
Show full document text