rfc8942xml2.original.xml | rfc8942.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 --> | |||
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 --> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
]> | ||||
<?rfc toc="yes"?> | ||||
<?rfc tocindent="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc strict="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<rfc ipr="trust200902" docName="draft-ietf-httpbis-client-hints-latest" category | ||||
="exp"> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | ||||
docName="draft-ietf-httpbis-client-hints-15" category="exp" | ||||
obsoletes="" updates="" submissionType="IETF" xml:lang="en" | ||||
tocInclude="true" sortRefs="true" symRefs="true" version="3" | ||||
number="8942" consensus="true"> | ||||
<!-- xml2rfc v2v3 conversion 2.47.0 --> | ||||
<front> | <front> | |||
<title>HTTP Client Hints</title> | <title>HTTP Client Hints</title> | |||
<seriesInfo name="RFC" value="8942"/> | ||||
<author initials="I." surname="Grigorik" fullname="Ilya Grigorik"> | <author initials="I." surname="Grigorik" fullname="Ilya Grigorik"> | |||
<organization>Google</organization> | <organization>Google</organization> | |||
<address> | <address> | |||
<email>ilya@igvita.com</email> | <email>ilya@igvita.com</email> | |||
<uri>https://www.igvita.com/</uri> | <uri>https://www.igvita.com/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | <author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | |||
<organization>Google</organization> | <organization>Google</organization> | |||
<address> | <address> | |||
<email>yoav@yoav.ws</email> | <email>yoav@yoav.ws</email> | |||
<uri>https://blog.yoav.ws/</uri> | <uri>https://blog.yoav.ws/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="January" year="2021"/> | ||||
<date /> | ||||
<area>Applications and Real-Time</area> | <area>Applications and Real-Time</area> | |||
<workgroup>HTTP</workgroup> | <workgroup>HTTP</workgroup> | |||
<keyword>Content Negotiation</keyword> | ||||
<keyword>Content Negotiation</keyword> | ||||
<abstract> | <abstract> | |||
<t>HTTP defines proactive content negotiation to allow servers to select | ||||
<t>HTTP defines proactive content negotiation to allow servers to select the app | the appropriate response for a given request, based upon the user | |||
ropriate response for a given request, based upon the user agent’s characteristi | agent's characteristics, as expressed in request headers. In practice, | |||
cs, as expressed in request headers. In practice, user agents are often unwillin | user agents are often unwilling to send those request headers, because | |||
g to send those request headers, because it is not clear whether they will be us | it is not clear whether they will be used, and sending them impacts both | |||
ed, and sending them impacts both performance and privacy.</t> | performance and privacy.</t> | |||
<t>This document defines an Accept-CH response header that servers can | ||||
<t>This document defines an Accept-CH response header that servers can use to ad | use to advertise their use of request headers for proactive content | |||
vertise their use of request headers for proactive content negotiation, along wi | negotiation, along with a set of guidelines for the creation of such | |||
th a set of guidelines for the creation of such headers, colloquially known as “ | headers, colloquially known as "Client Hints."</t> | |||
Client Hints.”</t> | ||||
</abstract> | </abstract> | |||
<note title="Note to Readers"> | ||||
<t>Discussion of this draft takes place on the HTTP working group mailing list | ||||
(ietf-http-wg@w3.org), which is archived at <eref target="https://lists.w3.org/A | ||||
rchives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/ | ||||
</eref>.</t> | ||||
<t>Working Group information can be found at <eref target="http://httpwg.github. | ||||
io/">http://httpwg.github.io/</eref>; source | ||||
code and issues list for this draft can be found at <eref target="https://github | ||||
.com/httpwg/http-extensions/labels/client-hints">https://github.com/httpwg/http- | ||||
extensions/labels/client-hints</eref>.</t> | ||||
</note> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction" numbered="true" toc="default"> | ||||
<name>Introduction</name> | ||||
<t>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 (<xref | ||||
target="RFC7231" sectionFormat="of" section="5.5.3"/>) against an establis | ||||
hed database of | ||||
user agent signatures), use HTTP cookies <xref target="RFC6265" | ||||
format="default"/> and URL parameters, or use some combination of these | ||||
and similar mechanisms to enable ad hoc content negotiation.</t> | ||||
<t>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:</t> | ||||
<ul spacing="compact"> | ||||
<li>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.</li> | ||||
<li>Cookie-based approaches are not portable across applications and | ||||
servers, impose additional client-side latency by requiring JavaScript | ||||
execution, and are not cache friendly.</li> | ||||
<li>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.</li> | ||||
</ul> | ||||
<t>Proactive content negotiation (<xref target="RFC7231" | ||||
sectionFormat="of" section="3.4.1"/>) offers an alternative approach; | ||||
user agents use specified, well-defined request headers to advertise | ||||
their capabilities and characteristics, so that servers can select (or | ||||
formulate) an appropriate response based on those request headers (or on | ||||
other, implicit characteristics).</t> | ||||
<section anchor="introduction" title="Introduction"> | <t>However, traditional proactive content negotiation techniques often | |||
mean that user agents send these request headers prolifically. This | ||||
<t>There are thousands of different devices accessing the web, each with differe | causes performance concerns (because it creates "bloat" in requests), as | |||
nt device capabilities and preference information. These device capabilities inc | well as privacy issues; passively providing such information allows | |||
lude hardware and software characteristics, as well as dynamic user and user age | servers to silently fingerprint the user.</t> | |||
nt preferences. Historically, applications that wanted the server to optimize co | ||||
ntent delivery and user experience based on such capabilities had to rely on pas | ||||
sive identification (e.g., by matching the User-Agent header field (Section 5.5. | ||||
3 of <xref target="RFC7231"/>) against an established database of user agent sig | ||||
natures), use HTTP cookies <xref target="RFC6265"/> and URL parameters, or use s | ||||
ome combination of these and similar mechanisms to enable ad hoc content negotia | ||||
tion.</t> | ||||
<t>Such techniques are expensive to set up and maintain, and are not portable ac | ||||
ross both applications and servers. They also make it hard for both user agent a | ||||
nd server to understand which data are required and is in use during the negotia | ||||
tion:</t> | ||||
<t><list style="symbols"> | ||||
<t>User agent detection cannot reliably identify all static variables, cannot | ||||
infer dynamic user agent preferences, requires an external device database, is n | ||||
ot cache friendly, and is reliant on a passive fingerprinting surface.</t> | ||||
<t>Cookie-based approaches are not portable across applications and servers, i | ||||
mpose additional client-side latency by requiring JavaScript execution, and are | ||||
not cache friendly.</t> | ||||
<t>URL parameters, similar to cookie-based approaches, suffer from lack of por | ||||
tability, and are hard to deploy due to a requirement to encode content negotiat | ||||
ion data inside of the URL of each resource.</t> | ||||
</list></t> | ||||
<t>Proactive content negotiation (Section 3.4.1 of <xref target="RFC7231"/>) off | ||||
ers an alternative approach; user agents use specified, well-defined request hea | ||||
ders to advertise their capabilities and characteristics, so that servers can se | ||||
lect (or formulate) an appropriate response based on those request headers (or o | ||||
n other, implicit characteristics).</t> | ||||
<t>However, traditional proactive content negotiation techniques often mean that | ||||
user agents send these request headers prolifically. This causes performance co | ||||
ncerns (because it creates “bloat” in requests), as well as privacy issues; pass | ||||
ively providing such information allows servers to silently fingerprint the user | ||||
.</t> | ||||
<t>This document defines Client Hints, a framework that enables servers to opt-i | ||||
n to specific proactive content negotiation features, adapting their content acc | ||||
ordingly, as well as guidelines for content negotiation mechanisms that use the | ||||
framework. | ||||
This document also defines a new response header, Accept-CH, that allows an orig | ||||
in server to explicitly ask that user agents send these headers in requests.</t> | ||||
<t>Client Hints mitigate performance concerns by assuring that user agents will | ||||
only send the request headers when they’re actually going to be used, and privac | ||||
y concerns of passive fingerprinting by requiring explicit opt-in and disclosure | ||||
of required headers by the server through the use of the Accept-CH response hea | ||||
der, turning passive fingerprinting vectors into active ones.</t> | ||||
<t>The document does not define specific usages of Client Hints. Such usages nee | ||||
d to be defined in their respective specifications.</t> | ||||
<t>One example of such usage is the User Agent Client Hints <xref target="UA-CH" | ||||
/>.</t> | ||||
<section anchor="notational-conventions" title="Notational Conventions"> | ||||
<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, | ||||
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this d | ||||
ocument are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <x | ||||
ref target="RFC8174"/> when, and only when, they appear in all capitals, as show | ||||
n here.</t> | ||||
<t>This document uses the Augmented Backus-Naur Form (ABNF) notation of <xref ta | ||||
rget="RFC5234"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="client-hint-request-header-fields" title="Client Hint Request H | ||||
eader Fields"> | ||||
<t>A Client Hint request header field is a HTTP header field that is used by HTT | ||||
P user agents to indicate data that can be used by the server to select an appro | ||||
priate response. Each one conveys user agent preferences that the server can use | ||||
to adapt and optimize the response.</t> | ||||
<section anchor="sending-client-hints" title="Sending Client Hints"> | ||||
<t>User agents choose what Client Hints to send in a request based on their defa | ||||
ult settings, user configuration, and server preferences expressed in <spanx sty | ||||
le="verb">Accept-CH</spanx>. | ||||
The user agent and server can use an opt-in mechanism outlined below to negotiat | ||||
e which header fields need to be sent to allow for efficient content adaption, a | ||||
nd optionally use additional mechanisms (e.g., as outlined in <xref target="CLIE | ||||
NT-HINTS-INFRASTRUCTURE"/>) to negotiate delegation policies that control access | ||||
of third parties to those same header fields. | ||||
User agents SHOULD require an opt-in to send any hints that are not listed in th | ||||
e low-entropy hint table at <xref target="CLIENT-HINTS-INFRASTRUCTURE"/>.</t> | ||||
<t>Implementers need to be aware of the fingerprinting implications when impleme | ||||
nting support for Client Hints, and follow the considerations outlined in the <x | ||||
ref target="security-considerations">Security Considerations</xref> section of t | ||||
his document.</t> | ||||
</section> | ||||
<section anchor="server-processing-of-client-hints" title="Server Processing of | ||||
Client Hints"> | ||||
<t>When presented with a request that contains one or more Client Hint header fi | ||||
elds, servers can optimize the response based upon the information in them. When | ||||
doing so, and if the resource is cacheable, the server MUST also generate a Var | ||||
y response header field (Section 7.1.4 of <xref target="RFC7231"/>) to indicate | ||||
which hints can affect the selected response and whether the selected response i | ||||
s appropriate for a later request.</t> | ||||
<t>Servers MUST ignore hints they do not understand nor support. There is no mec | ||||
hanism for servers to indicate to user agents that hints were ignored.</t> | ||||
<t>Furthermore, the server can generate additional response header fields (as sp | ||||
ecified by the hint or hints in use) that convey related values to aid client pr | ||||
ocessing.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="advertising-server-support" title="Advertising Server Support"> | ||||
<t>Servers can advertise support for Client Hints using the mechanism described | ||||
below.</t> | ||||
<section anchor="accept-ch" title="The Accept-CH Response Header Field"> | <t>This document defines Client Hints, a framework that enables servers | |||
to opt-in to specific proactive content negotiation features, adapting | ||||
their content accordingly, as well as guidelines for content negotiation | ||||
mechanisms that use the framework. This document also defines a new | ||||
response header, Accept-CH, that allows an origin server to explicitly | ||||
ask that user agents send these headers in requests.</t> | ||||
<t>The Accept-CH response header field indicates server support for the hints in | <t>Client Hints mitigate performance concerns by assuring that user | |||
dicated in its value. | agents will only send the request headers when they're actually going to | |||
Servers wishing to receive user agent information through Client Hints SHOULD ad | be used, and they mitigate privacy concerns of passive fingerprinting by r | |||
d Accept-CH response header to their responses as early as possible.</t> | equiring | |||
explicit opt-in and disclosure of required headers by the server through | ||||
the use of the Accept-CH response header, turning passive fingerprinting | ||||
vectors into active ones.</t> | ||||
<t>The document does not define specific usages of Client Hints. Such | ||||
usages need to be defined in their respective specifications.</t> | ||||
<t>One example of such usage is the User-Agent Client Hints <xref | ||||
target="UA-CH" format="default"/>.</t> | ||||
<section anchor="notational-conventions" numbered="true" toc="default"> | ||||
<name>Notational Conventions</name> | ||||
<t> | ||||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>This document uses the Augmented Backus-Naur Form (ABNF) notation | ||||
of <xref target="RFC5234" format="default"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="client-hint-request-header-fields" numbered="true" toc="def | ||||
ault"> | ||||
<name>Client Hints Request Header Fields</name> | ||||
<t>A Client Hints request header field is an HTTP header field that is | ||||
used by HTTP user agents to indicate data that can be used by the server | ||||
to select an appropriate response. Each one conveys user-agent | ||||
preferences that the server can use to adapt and optimize the | ||||
response.</t> | ||||
<t>Accept-CH is a Structured Header <xref target="I-D.ietf-httpbis-header-struct | <section anchor="sending-client-hints" numbered="true" toc="default"> | |||
ure"/>. Its value MUST be an sf-list (Section 3.1 of <xref target="I-D.ietf-http | <name>Sending Client Hints</name> | |||
bis-header-structure"/>) whose members are tokens (Section 3.3.4 of <xref target | <t>User agents choose what Client Hints to send in a request based on | |||
="I-D.ietf-httpbis-header-structure"/>). Its ABNF is:</t> | their default settings, user configuration, and server preferences | |||
expressed in <tt>Accept-CH</tt>. The user agent and server can use an | ||||
opt-in mechanism outlined below to negotiate which header fields need | ||||
to be sent to allow for efficient content adaption, and they can optional | ||||
ly use | ||||
additional mechanisms (e.g., as outlined in <xref | ||||
target="CLIENT-HINTS-INFRASTRUCTURE" format="default"/>) to negotiate | ||||
delegation policies that control access of third parties to those same | ||||
header fields. User agents <bcp14>SHOULD</bcp14> require an opt-in to sen | ||||
d any hints | ||||
that are not considered low-entropy. See the low-entropy hint table | ||||
at <xref target="CLIENT-HINTS-INFRASTRUCTURE" format="default"/> for | ||||
examples of hints that expose low amounts of entropy.</t> | ||||
<t>Implementers need to be aware of the fingerprinting implications | ||||
when implementing support for Client Hints and follow the | ||||
considerations outlined in the Security Considerations section of this | ||||
document (see <xref target="security-considerations" | ||||
format="default"/>).</t> | ||||
</section> | ||||
<section anchor="server-processing-of-client-hints" numbered="true" toc="d | ||||
efault"> | ||||
<name>Server Processing of Client Hints</name> | ||||
<t>When presented with a request that contains one or more Client Hints | ||||
header fields, servers can optimize the response based upon the | ||||
information in them. When doing so, and if the resource is cacheable, | ||||
the server <bcp14>MUST</bcp14> also generate a Vary response header field | ||||
(<xref target="RFC7231" sectionFormat="of" section="7.1.4"/>) to indicate | ||||
which | ||||
hints can affect the selected response and whether the selected | ||||
response is appropriate for a later request.</t> | ||||
<t>Servers <bcp14>MUST</bcp14> ignore hints they do not understand nor s | ||||
upport. There | ||||
is no mechanism for servers to indicate to user agents that hints were | ||||
ignored.</t> | ||||
<t>Furthermore, the server can generate additional response header | ||||
fields (as specified by the hint or hints in use) that convey related | ||||
values to aid client processing.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="advertising-server-support" numbered="true" toc="default"> | ||||
<name>Advertising Server Support</name> | ||||
<t>Servers can advertise support for Client Hints using the mechanism desc | ||||
ribed below.</t> | ||||
<section anchor="accept-ch" numbered="true" toc="default"> | ||||
<name>The Accept-CH Response Header Field</name> | ||||
<t>The Accept-CH response header field indicates server support for | ||||
the hints indicated in its value. Servers wishing to receive user agent | ||||
information through Client Hints <bcp14>SHOULD</bcp14> add the Accept-CH | ||||
response | ||||
header to their responses as early as possible.</t> | ||||
<t>Accept-CH is a Structured Header <xref | ||||
target="RFC8941" format="default"/>. Its | ||||
value <bcp14>MUST</bcp14> be an sf-list (<xref | ||||
target="RFC8941" sectionFormat="of" | ||||
section="3.1"/>) whose members are Tokens (<xref | ||||
target="RFC8941" sectionFormat="of" | ||||
section="3.3.4"/>). Its ABNF is:</t> | ||||
<figure><artwork type="abnf"><![CDATA[ | <sourcecode type="abnf"><![CDATA[ | |||
Accept-CH = sf-list | Accept-CH = sf-list | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>For example:</t> | ||||
<t>For example:</t> | <sourcecode type="http-message"><![CDATA[ | |||
Accept-CH: Sec-CH-Example, Sec-CH-Example-2 | ||||
<figure><artwork type="example"><![CDATA[ | ]]></sourcecode> | |||
Accept-CH: Sec-CH-Example, Sec-CH-Example-2 | <t>When a user agent receives an HTTP response containing | |||
]]></artwork></figure> | <tt>Accept-CH</tt>, it indicates that the origin opts-in to receive | |||
the indicated request header fields for subsequent same-origin | ||||
<t>When a user agent receives an HTTP response containing <spanx style="verb">Ac | requests. The opt-in <bcp14>MUST</bcp14> be ignored if delivered over non | |||
cept-CH</spanx>, that indicates that the origin opts-in to receive the indicated | -secure | |||
request header fields for subsequent same-origin requests. | transport (using a scheme different from HTTPS). It <bcp14>SHOULD</bcp14> | |||
The opt-in MUST be ignored if delivered over non-secure transport (using a schem | be | |||
e different from HTTPS). | persisted and bound to the origin to enable delivery of Client Hints | |||
It SHOULD be persisted and bound to the origin to enable delivery of Client Hint | on subsequent requests to the server's origin, for the duration of the | |||
s on subsequent requests to the server’s origin, for the duration of the user’s | user's session (as defined by the user agent). An opt-in overrides | |||
session (as defined by the user agent). | previous persisted opt-in values and <bcp14>SHOULD</bcp14> be persisted i | |||
An opt-in overrides previous persisted opt-in values and SHOULD be persisted in | n its | |||
its stead.</t> | stead.</t> | |||
<t>Based on the Accept-CH example above, which is received in response | ||||
<t>Based on the Accept-CH example above, which is received in response to a user | to a user agent navigating to "https://site.example", and delivered | |||
agent navigating to “https://site.example”, and delivered over a secure transpo | over a secure transport, persisted Accept-CH preferences will be bound | |||
rt, persisted Accept-CH preferences will be bound to “https://site.example”. | to "https://site.example". It will then use it for navigations to | |||
It will then use it for navigations to e.g., “https://site.example/foobar.html”, | for example, "https://site.example/foobar.html", but not to, for example, | |||
but not to e.g., “https://foobar.site.example/”. | "https://foobar.site.example/". It will similarly use the preference | |||
It will similarly use the preference for any same-origin resource requests (e.g. | for any same-origin resource requests (e.g., to | |||
, to “https://site.example/image.jpg”) initiated by the page constructed from th | "https://site.example/image.jpg") initiated by the page constructed | |||
e navigation’s response, but not to cross-origin resource requests (e.g., “https | from the navigation's response, but not to cross-origin resource | |||
://thirdparty.example/resource.js”). | requests (e.g., "https://thirdparty.example/resource.js"). This | |||
This preference will not extend to resource requests initiated to “https://site. | preference will not extend to resource requests initiated to | |||
example” from other origins (e.g., from navigations to “https://other.example/”) | "https://site.example" from other origins (e.g., from navigations to | |||
.</t> | "https://other.example/").</t> | |||
</section> | ||||
</section> | <section anchor="interaction-with-caches" numbered="true" toc="default"> | |||
<section anchor="interaction-with-caches" title="Interaction with Caches"> | <name>Interaction with Caches</name> | |||
<t>When selecting a response based on one or more Client Hints, and if | ||||
<t>When selecting a response based on one or more Client Hints, and if the resou | the resource is cacheable, the server needs to generate a Vary | |||
rce is cacheable, the server needs to generate a Vary response header field (<xr | response header field <xref target="RFC7234" format="default"/> to | |||
ef target="RFC7234"/>) to indicate which hints can affect the selected response | indicate which hints can affect the selected response and whether the | |||
and whether the selected response is appropriate for a later request.</t> | selected response is appropriate for a later request.</t> | |||
<figure><artwork type="example"><![CDATA[ | ||||
Vary: Sec-CH-Example | ||||
]]></artwork></figure> | ||||
<t>The above example indicates that the cache key needs to include the Sec-CH-Ex | ||||
ample header field.</t> | ||||
<figure><artwork type="example"><![CDATA[ | ||||
Vary: Sec-CH-Example, Sec-CH-Example-2 | ||||
]]></artwork></figure> | ||||
<t>The above example indicates that the cache key needs to include the Sec-CH-Ex | ||||
ample and Sec-CH-Example-2 header fields.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="security-considerations" title="Security Considerations"> | ||||
<section anchor="information-exposure" title="Information Exposure"> | ||||
<t>Request header fields used in features relying on this document expose inform | ||||
ation about the user’s environment to enable privacy-preserving proactive conten | ||||
t negotiation, and avoid exposing passive fingerprinting vectors. | ||||
However, implementers need to bear in mind that in the worst case, uncontrolled | ||||
and unmonitored active fingerprinting is not better than passive fingerprinting. | ||||
In order to provide user privacy benefits, user agents need to apply further po | ||||
licies that prevent abuse of the information exposed by features using Client Hi | ||||
nts.</t> | ||||
<t>The information exposed by features might reveal new information about the us | ||||
er and implementers ought to consider the following considerations, recommendati | ||||
ons, and best practices.</t> | ||||
<t>The underlying assumption is that exposing information about the user as a re | ||||
quest header is equivalent (from a security perspective) to exposing this inform | ||||
ation by other means. (For example, if the request’s origin can access that info | ||||
rmation using JavaScript APIs, and transmit it to its servers).</t> | ||||
<t>Because Client Hints is an explicit opt-in mechanism, that means that servers | ||||
that want access to information about the user’s environment need to actively a | ||||
sk for it, enabling clients and privacy researchers to keep track of which origi | ||||
ns collect that data, and potentially act upon it. | ||||
The header-based opt-in means that removal of passive fingerprinting vectors is | ||||
possible, such as the User-Agent string (enabling active access to that informat | ||||
ion through User-Agent Client Hints (<xref target="UA-CH"/>) or otherwise expose | ||||
information already available through script (e.g., the <eref target="https://w | ||||
icg.github.io/savedata/#save-data-request-header-field">Save-Data Client Hint</e | ||||
ref>), without increasing the passive fingerprinting surface. User agents suppor | ||||
ting Client Hints features which send certain information to opted-in servers SH | ||||
OULD avoid sending the equivalent information passively.</t> | ||||
<t>Therefore, features relying on this document to define Client Hint headers MU | ||||
ST NOT provide new information that is otherwise not made available to the appli | ||||
cation by the user agent, such as existing request headers, HTML, CSS, or JavaSc | ||||
ript.</t> | ||||
<t>Such features need to take into account the following aspects of the informat | ||||
ion exposed:</t> | ||||
<t><list style="symbols"> | ||||
<t>Entropy - Exposing highly granular data can be used to help identify users | ||||
across multiple requests to different origins. Reducing the set of header field | ||||
values that can be expressed, or restricting them to an enumerated range where t | ||||
he advertised value is close to but is not an exact representation of the curren | ||||
t value, can improve privacy and reduce risk of linkability by ensuring that the | ||||
same value is sent by multiple users.</t> | ||||
<t>Sensitivity - The feature SHOULD NOT expose user-sensitive information. To | ||||
that end, information available to the application, but gated behind specific u | ||||
ser actions (e.g., a permission prompt or user activation) SHOULD NOT be exposed | ||||
as a Client Hint.</t> | ||||
<t>Change over time - The feature SHOULD NOT expose user information that chan | ||||
ges over time, unless the state change itself is also exposed (e.g., through Jav | ||||
aScript callbacks).</t> | ||||
</list></t> | ||||
<t>Different features will be positioned in different points in the space betwee | ||||
n low-entropy, non-sensitive and static information (e.g., user agent informatio | ||||
n), and high-entropy, sensitive and dynamic information (e.g., geolocation). Use | ||||
r agents need to consider the value provided by a particular feature vs these co | ||||
nsiderations, and may wish to have different policies regarding that tradeoff on | ||||
a per-feature or other fine-grained basis.</t> | ||||
<t>Implementers ought to consider both user- and server- controlled mechanisms a | <sourcecode type="http-message"><![CDATA[ | |||
nd policies to control which Client Hints header fields are advertised:</t> | Vary: Sec-CH-Example | |||
]]></sourcecode> | ||||
<t>The above example indicates that the cache key needs to include the | ||||
Sec-CH-Example header field.</t> | ||||
<t><list style="symbols"> | <sourcecode type="http-message"><![CDATA[ | |||
<t>Implementers SHOULD restrict delivery of some or all Client Hints header fi | Vary: Sec-CH-Example, Sec-CH-Example-2 | |||
elds to the opt-in origin only, unless the opt-in origin has explicitly delegate | ]]></sourcecode> | |||
d permission to another origin to request Client Hints header fields.</t> | <t>The above example indicates that the cache key needs to include the | |||
<t>Implementers considering providing user choice mechanisms that allow users | Sec-CH-Example and Sec-CH-Example-2 header fields.</t> | |||
to balance privacy concerns against bandwidth limitations need to also consider | </section> | |||
that explaining to users the privacy implications involved, such as the risks of | </section> | |||
passive fingerprinting, may be challenging or even impractical.</t> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
<t>Implementations specific to certain use cases or threat models MAY avoid tr | <name>Security Considerations</name> | |||
ansmitting some or all of Client Hints header fields. For example, avoid transmi | <section anchor="information-exposure" numbered="true" toc="default"> | |||
ssion of header fields that can carry higher risks of linkability.</t> | <name>Information Exposure</name> | |||
</list></t> | <t>Request header fields used in features relying on this document | |||
expose information about the user's environment to enable | ||||
privacy-preserving proactive content negotiation and avoid exposing | ||||
passive fingerprinting vectors. However, implementers need to bear in | ||||
mind that in the worst case, uncontrolled and unmonitored active | ||||
fingerprinting is not better than passive fingerprinting. In order to | ||||
provide user privacy benefits, user agents need to apply further | ||||
policies that prevent abuse of the information exposed by features | ||||
using Client Hints.</t> | ||||
<t>User agents MUST clear persisted opt-in preferences when any one of site data | <t>The information exposed by features might reveal new information | |||
, browsing history, browsing cache, cookies, or similar, are cleared.</t> | about the user, and implementers ought to consider the following | |||
considerations, recommendations, and best practices.</t> | ||||
</section> | <t>The underlying assumption is that exposing information about the | |||
<section anchor="deployment-and-security-risks" title="Deployment and Security R | user as a request header is equivalent (from a security perspective) | |||
isks"> | to exposing this information by other means. (For example, if the | |||
<t>Deployment of new request headers requires several considerations:</t> | request's origin can access that information using JavaScript APIs | |||
and transmit it to its servers.)</t> | ||||
<t><list style="symbols"> | <t>Because Client Hints is an explicit opt-in mechanism, it means | |||
<t>Potential conflicts due to existing use of header field name</t> | that servers wanting access to information about the user's | |||
<t>Properties of the data communicated in header field value</t> | environment need to actively ask for it, enabling clients and privacy | |||
</list></t> | researchers to keep track of which origins collect that data, and | |||
potentially act upon it. | ||||
The header-based opt-in means that removal of passive fingerprinting vectors | ||||
is possible. As an example, the user agent can reduce the information | ||||
exposed by the User-Agent string, while enabling active access to that | ||||
information through User-Agent Client Hints <xref target="UA-CH" | ||||
format="default"/>. | ||||
Otherwise, the user agent can expose information already available through | ||||
script (e.g., the Save-Data Client Hints <eref brackets="angle" | ||||
target="https://wicg.github.io/savedata/#save-data-request-header-field"></e | ||||
ref>), | ||||
without increasing the passive fingerprinting surface. User agents supportin | ||||
g | ||||
Client Hints features which send certain information to opted-in servers | ||||
<bcp14>SHOULD</bcp14> avoid sending the equivalent information passively.</t | ||||
> | ||||
<t>Authors of new Client Hints are advised to carefully consider whether they ne | <t>Therefore, features relying on this document to define Client Hint | |||
ed to be able to be added by client-side content (e.g., scripts), or whether the | headers <bcp14>MUST NOT</bcp14> provide new information that is otherwise | |||
y need to be exclusively set by the user agent. In the latter case, the Sec- pre | not made | |||
fix on the header field name has the effect of preventing scripts and other appl | available to the application by the user agent, such as existing | |||
ication content from setting them in user agents. | request headers, HTML, CSS, or JavaScript.</t> | |||
Using the “Sec-“ prefix signals to servers that the user agent - and not applica | ||||
tion content - generated the values. See <xref target="FETCH"/> for more informa | ||||
tion.</t> | ||||
<t>By convention, request headers that are Client Hints are encouraged to use a | <t>Such features need to take into account the following aspects of | |||
CH- prefix, to make them easier to identify as using this framework; for example | the exposed information:</t> | |||
, CH-Foo or, with a “Sec-“ prefix, Sec-CH-Foo. Doing so makes them easier to ide | ||||
ntify programmatically (e.g., for stripping unrecognised hints from requests by | ||||
privacy filters).</t> | ||||
<t>A Client Hints request header negotiated using the Accept-CH opt-in mechanism | <dl newline="false" spacing="normal"> | |||
MUST have a field name that matches sf-token (Section 3.3.4 of <xref target="I- | <dt>Entropy:</dt> | |||
D.ietf-httpbis-header-structure"/>).</t> | <dd>Exposing highly granular data can be used to help | |||
identify users across multiple requests to different | ||||
origins. Reducing the set of header field values that can be | ||||
expressed, or restricting them to an enumerated range where the | ||||
advertised value is close to but is not an exact representation of | ||||
the current value, can improve privacy and reduce risk of | ||||
linkability by ensuring that the same value is sent by multiple | ||||
users.</dd> | ||||
</section> | <dt>Sensitivity:</dt> | |||
<section anchor="abuse-detection" title="Abuse Detection"> | <dd>The feature <bcp14>SHOULD NOT</bcp14> expose user-sensitive | |||
<t>A user agent that tracks access to active fingerprinting information SHOULD c | information. To that end, information available to the application, | |||
onsider emission of Client Hints headers similarly to the way it would consider | but gated behind specific user actions (e.g., a permission prompt or | |||
access to the equivalent API.</t> | user activation), <bcp14>SHOULD NOT</bcp14> be exposed as a Client Hint | |||
.</dd> | ||||
<t>Research into abuse of Client Hints might look at how HTTP responses to reque | <dt>Change over time:</dt> | |||
sts that contain Client Hints differ from those with different values, and from | <dd>The feature <bcp14>SHOULD NOT</bcp14> expose user | |||
those without. This might be used to reveal which Client Hints are in use, allow | information that changes over time, unless the state change itself | |||
ing researchers to further analyze that use.</t> | is also exposed (e.g., through JavaScript callbacks).</dd> | |||
</dl> | ||||
<t>Different features will be positioned in different points in the | ||||
space between low-entropy, non-sensitive, and static information (e.g., | ||||
user agent information) and high-entropy, sensitive, and dynamic | ||||
information (e.g., geolocation). User agents need to consider the | ||||
value provided by a particular feature vs. these considerations and | ||||
may wish to have different policies regarding that tradeoff on a | ||||
per-feature or other fine-grained basis.</t> | ||||
</section> | <t>Implementers ought to consider both user- and server-controlled | |||
</section> | mechanisms and policies to control which Client Hints header fields | |||
<section anchor="cost-of-sending-hints" title="Cost of Sending Hints"> | are advertised:</t> | |||
<t>Sending Client Hints to the server incurs an increase in request byte size. S | <ul spacing="normal"> | |||
ome of this increase can be mitigated by HTTP header compression schemes, but ea | <li>Implementers <bcp14>SHOULD</bcp14> restrict delivery of some or al | |||
ch new hint sent will still lead to some increased bandwidth usage. | l Client | |||
Servers SHOULD take that into account when opting in to receive Client Hints, an | Hints header fields to the opt-in origin only, unless the opt-in | |||
d SHOULD NOT opt-in to receive hints unless they are to be used for content adap | origin has explicitly delegated permission to another origin to | |||
tation purposes.</t> | request Client Hints header fields.</li> | |||
<li>Implementers that consider providing user-choice mechanisms that | ||||
allow users to balance privacy concerns against bandwidth | ||||
limitations need to also consider that explaining the | ||||
privacy implications involved to users, such as the risks of passive | ||||
fingerprinting, may be challenging or even impractical.</li> | ||||
<li>Implementations specific to certain use cases or threat models | ||||
<bcp14>MAY</bcp14> avoid transmitting some or all of the Client Hints h | ||||
eader | ||||
fields. For example, avoid transmission of header fields that can | ||||
carry higher risks of linkability.</li> | ||||
</ul> | ||||
<t>Due to request byte size increase, features relying on this document to defin | <t>User agents <bcp14>MUST</bcp14> clear persisted opt-in preferences when | |||
e Client Hints MAY consider restricting sending those hints to certain request d | any one of | |||
estinations <xref target="FETCH"/>, where they are more likely to be useful.</t> | site data, browsing cache, cookies, or similar are cleared.</t> | |||
</section> | ||||
<section anchor="deployment-and-security-risks" numbered="true" toc="defau | ||||
lt"> | ||||
<name>Deployment and Security Risks</name> | ||||
<t>Deployment of new request headers requires several considerations:</t | ||||
> | ||||
<ul spacing="compact"> | ||||
<li>Potential conflicts due to existing use of a header field name</li | ||||
> | ||||
</section> | <li>Properties of the data communicated in a header field value</li> | |||
<section anchor="iana-considerations" title="IANA Considerations"> | </ul> | |||
<t>Authors of new Client Hints are advised to carefully consider | ||||
whether they need to be able to be added by client-side content (e.g., | ||||
scripts) or whether the Client Hints need to be exclusively set by the us | ||||
er | ||||
agent. In the latter case, the Sec- prefix on the header field name | ||||
has the effect of preventing scripts and other application content | ||||
from setting them in user agents. Using the "Sec-" prefix signals to | ||||
servers that the user agent -- and not application content -- generated | ||||
the values. See <xref target="FETCH" format="default"/> for more | ||||
information.</t> | ||||
<t>Features relying on this document are expected to register added request head | <t>By convention, request headers that are Client Hints are encouraged | |||
er fields in the Permanent Message Header Fields registry (<xref target="RFC3864 | to use a CH- prefix, to make them easier to identify as using this | |||
"/>).</t> | framework; for example, CH-Foo or, with a "Sec-" prefix, | |||
Sec-CH-Foo. Doing so makes them easier to identify programmatically | ||||
(e.g., for stripping unrecognized hints from requests by privacy | ||||
filters).</t> | ||||
<t>A Client Hints request header negotiated using the Accept-CH opt-in | ||||
mechanism <bcp14>MUST</bcp14> have a field name that matches sf-token | ||||
(<xref target="RFC8941" sectionFormat="of" | ||||
section="3.3.4"/>).</t> | ||||
</section> | ||||
<section anchor="abuse-detection" numbered="true" toc="default"> | ||||
<name>Abuse Detection</name> | ||||
<t>A user agent that tracks access to active fingerprinting | ||||
information <bcp14>SHOULD</bcp14> consider emission of Client Hints heade | ||||
rs similar | ||||
to the way it would consider access to the equivalent API.</t> | ||||
<t>This document defines the “Accept-CH” HTTP response header field, and registe | <t>Research into abuse of Client Hints might look at how HTTP | |||
rs it in the same registry.</t> | responses to requests that contain Client Hints differ from those with | |||
different values and from those without values. This might be used to rev | ||||
eal | ||||
which Client Hints are in use, allowing researchers to further analyze | ||||
that use.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="cost-of-sending-hints" numbered="true" toc="default"> | ||||
<name>Cost of Sending Hints</name> | ||||
<t>Sending Client Hints to the server incurs an increase in request byte | ||||
size. Some of this increase can be mitigated by HTTP header | ||||
compression schemes, but each new hint sent will still lead to some | ||||
increased bandwidth usage. Servers <bcp14>SHOULD</bcp14> take that into ac | ||||
count when | ||||
opting in to receive Client Hints and <bcp14>SHOULD NOT</bcp14> opt-in to | ||||
receive | ||||
hints unless they are to be used for content adaptation purposes.</t> | ||||
<section anchor="iana-accept-ch" title="Accept-CH"> | <t>Due to request byte size increase, features relying on this document | |||
<t><list style="symbols"> | to define Client Hints <bcp14>MAY</bcp14> consider restricting sending tho | |||
<t>Header field name: Accept-CH</t> | se hints to | |||
<t>Applicable protocol: HTTP</t> | certain request destinations <xref target="FETCH" format="default"/>, | |||
<t>Status: experimental</t> | where they are more likely to be useful.</t> | |||
<t>Author/Change controller: IETF</t> | </section> | |||
<t>Specification document(s): <xref target="accept-ch"/> of this document</t> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
<t>Related information: for Client Hints</t> | <name>IANA Considerations</name> | |||
</list></t> | <t>Features relying on this document are expected to register added | |||
request header fields in the "Permanent Message Header Field Names" regist | ||||
ry | ||||
<xref target="RFC3864" format="default"/>.</t> | ||||
</section> | <t>This document defines the "Accept-CH" HTTP response header field; | |||
</section> | IANA has registered it in the same registry.</t> | |||
<section anchor="iana-accept-ch" numbered="true" toc="default"> | ||||
<name>Accept-CH</name> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Header field name:</dt> | ||||
<dd>Accept-CH</dd> | ||||
<dt>Applicable protocol:</dt> | ||||
<dd>HTTP</dd> | ||||
<dt>Status:</dt> | ||||
<dd>experimental</dd> | ||||
<dt>Author/Change controller:</dt> | ||||
<dd>IETF</dd> | ||||
<dt>Specification document(s):</dt> | ||||
<dd><xref target="accept-ch" format="default"/> of this | ||||
RFC</dd> | ||||
<dt>Related information:</dt> | ||||
<dd>for Client Hints</dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3864.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7231.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
<references title='Normative References'> | <!-- draft-ietf-httpbis-header-structure-19: RFC 8941 --> | |||
<reference anchor='RFC8941' target='https://www.rfc-editor.org/info/rfc8941'> | ||||
<reference anchor="RFC3864" target='https://www.rfc-editor.org/info/rfc3864'> | ||||
<front> | ||||
<title>Registration Procedures for Message Header Fields</title> | ||||
<author initials='G.' surname='Klyne' fullname='G. Klyne'><organization /></auth | ||||
or> | ||||
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organizatio | ||||
n /></author> | ||||
<author initials='J.' surname='Mogul' fullname='J. Mogul'><organization /></auth | ||||
or> | ||||
<date year='2004' month='September' /> | ||||
<abstract><t>This specification defines registration procedures for the message | ||||
header fields used by Internet mail, HTTP, Netnews and other applications. This | ||||
document specifies an Internet Best Current Practices for the Internet Communit | ||||
y, and requests discussion and suggestions for improvements.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='90'/> | ||||
<seriesInfo name='RFC' value='3864'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC3864'/> | ||||
</reference> | ||||
<reference anchor="RFC5234" target='https://www.rfc-editor.org/info/rfc5234'> | ||||
<front> | ||||
<title>Augmented BNF for Syntax Specifications: ABNF</title> | ||||
<author initials='D.' surname='Crocker' fullname='D. Crocker' role='editor'><org | ||||
anization /></author> | ||||
<author initials='P.' surname='Overell' fullname='P. Overell'><organization /></ | ||||
author> | ||||
<date year='2008' month='January' /> | ||||
<abstract><t>Internet technical specifications often need to define a formal syn | ||||
tax. Over the years, a modified version of Backus-Naur Form (BNF), called Augme | ||||
nted BNF (ABNF), has been popular among many Internet specifications. The curre | ||||
nt specification documents ABNF. It balances compactness and simplicity with rea | ||||
sonable representational power. The differences between standard BNF and ABNF i | ||||
nvolve naming rules, repetition, alternatives, order-independence, and value ran | ||||
ges. This specification also supplies additional rule definitions and encoding | ||||
for a core lexical analyzer of the type common to several Internet specification | ||||
s. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='STD' value='68'/> | ||||
<seriesInfo name='RFC' value='5234'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC5234'/> | ||||
</reference> | ||||
<reference anchor="RFC7231" target='https://www.rfc-editor.org/info/rfc7231'> | ||||
<front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title> | ||||
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><o | ||||
rganization /></author> | ||||
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><org | ||||
anization /></author> | ||||
<date year='2014' month='June' /> | ||||
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application | ||||
- level protocol for distributed, collaborative, hypertext information systems. | ||||
This document defines the semantics of HTTP/1.1 messages, as expressed by reque | ||||
st methods, request header fields, response status codes, and response header fi | ||||
elds, along with the payload of messages (metadata and body content) and mechani | ||||
sms for content negotiation.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7231'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7231'/> | ||||
</reference> | ||||
<reference anchor="RFC7234" target='https://www.rfc-editor.org/info/rfc7234'> | ||||
<front> | ||||
<title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title> | ||||
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><o | ||||
rganization /></author> | ||||
<author initials='M.' surname='Nottingham' fullname='M. Nottingham' role='editor | ||||
'><organization /></author> | ||||
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><org | ||||
anization /></author> | ||||
<date year='2014' month='June' /> | ||||
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application | ||||
- level protocol for distributed, collaborative, hypertext information systems. | ||||
This document defines HTTP caches and the associated header fields that control | ||||
cache behavior or indicate cacheable response messages.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7234'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7234'/> | ||||
</reference> | ||||
<reference anchor="CLIENT-HINTS-INFRASTRUCTURE" target="https://wicg.github.io/c | ||||
lient-hints-infrastructure/"> | ||||
<front> | ||||
<title>Client Hints Infrastructure</title> | ||||
<author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<date year="n.d."/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'> | ||||
<front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</title> | ||||
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></ | ||||
author> | ||||
<date year='1997' month='March' /> | ||||
<abstract><t>In many standards track documents several words are used to signify | ||||
the requirements in the specification. These words are often capitalized. This | ||||
document defines these words as they should be interpreted in IETF documents. | ||||
This document specifies an Internet Best Current Practices for the Internet Comm | ||||
unity, and requests discussion and suggestions for improvements.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='14'/> | ||||
<seriesInfo name='RFC' value='2119'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC2119'/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
or> | ||||
<date year='2017' month='May' /> | ||||
<abstract><t>RFC 2119 specifies common key words that may be used in protocol s | ||||
pecifications. This document aims to reduce the ambiguity by clarifying that on | ||||
ly UPPERCASE usage of the key words have the defined special meanings.</t></abs | ||||
tract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='14'/> | ||||
<seriesInfo name='RFC' value='8174'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8174'/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-httpbis-header-structure"> | ||||
<front> | <front> | |||
<title>Structured Field Values for HTTP</title> | <title>Structured Field Values for HTTP</title> | |||
<author initials='M' surname='Nottingham' fullname='Mark Nottingham'> | <author initials='M' surname='Nottingham' fullname='Mark Nottingham'> | |||
<organization /> | <organization /> | |||
</author> | </author> | |||
<author initials='P-H.' surname='Kamp' fullname='Poul-Henning Kamp'> | ||||
<author initials='P' surname='Kamp' fullname='Poul-Henning Kamp'> | ||||
<organization /> | <organization /> | |||
</author> | </author> | |||
<date month='January' year='2021' /> | ||||
<date month='June' day='3' year='2020' /> | ||||
<abstract><t>This document describes a set of data types and associated algorith | ||||
ms that are intended to make it easier and safer to define and handle HTTP heade | ||||
r and trailer fields, known as "Structured Fields", "Structured Headers", or "St | ||||
ructured Trailers". It is intended for use by specifications of new HTTP fields | ||||
that wish to use a common syntax that is more restrictive than traditional HTTP | ||||
field values.</t></abstract> | ||||
</front> | </front> | |||
<seriesInfo name='RFC' value='8941' /> | ||||
<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-header-structure-19' | <seriesInfo name='DOI' value='10.17487/RFC8941' /> | |||
/> | ||||
<format type='TXT' | ||||
target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-header-st | ||||
ructure-19.txt' /> | ||||
</reference> | </reference> | |||
</references> | ||||
</references> | <references> | |||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6265.xml"/> | ||||
<references title='Informative References'> | <reference anchor="UA-CH" target="https://wicg.github.io/ua-client-hints | |||
/"> | ||||
<front> | ||||
<title>User-Agent Client Hints</title> | ||||
<author initials="M." surname="West" fullname="Mike West"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | ||||
<organization>Google</organization> | ||||
</author> | ||||
<date month="August" year="2020"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC6265" target='https://www.rfc-editor.org/info/rfc6265'> | <reference anchor="CLIENT-HINTS-INFRASTRUCTURE" target="https://wicg.git | |||
<front> | hub.io/client-hints-infrastructure/"> | |||
<title>HTTP State Management Mechanism</title> | <front> | |||
<author initials='A.' surname='Barth' fullname='A. Barth'><organization /></auth | <title>Client Hints Infrastructure</title> | |||
or> | <author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | |||
<date year='2011' month='April' /> | <organization>Google</organization> | |||
<abstract><t>This document defines the HTTP Cookie and Set-Cookie header fields. | </author> | |||
These header fields can be used by HTTP servers to store state (called cookies) | <date month='July' year='2020'/> | |||
at HTTP user agents, letting the servers maintain a stateful session over the m | </front> | |||
ostly stateless HTTP protocol. Although cookies have many historical infeliciti | </reference> | |||
es that degrade their security and privacy, the Cookie and Set-Cookie header fie | ||||
lds are widely used on the Internet. This document obsoletes RFC 2965. [STANDA | ||||
RDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='6265'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC6265'/> | ||||
</reference> | ||||
<reference anchor="UA-CH" target="https://wicg.github.io/ua-client-hints/"> | <reference anchor="FETCH" target="https://fetch.spec.whatwg.org/"> | |||
<front> | <front> | |||
<title>User Agent Client Hints</title> | <title>Fetch - Living Standard</title> | |||
<author initials="M." surname="West" fullname="Mike West"> | <author> | |||
<organization>Google</organization> | <organization>WHATWG</organization> | |||
</author> | </author> | |||
<author initials="Y." surname="Weiss" fullname="Yoav Weiss"> | <date month="September" year="2020"/> | |||
<organization>Google</organization> | </front> | |||
</author> | <refcontent>Living Standard</refcontent> | |||
<date year="n.d."/> | </reference> | |||
</front> | ||||
</reference> | ||||
<reference anchor="FETCH" target="https://fetch.spec.whatwg.org/"> | ||||
<front> | ||||
<title>Fetch</title> | ||||
<author initials="A." surname="van Kesteren" fullname="Anne van Kesteren"> | ||||
<organization>Mozilla</organization> | ||||
</author> | ||||
<date year="n.d."/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="changes" title="Changes"> | <section numbered="false" anchor="acknowledgements" toc="default"> | |||
<name>Acknowledgements</name> | ||||
<section anchor="since-00" title="Since -00"> | <t>Thanks to <contact fullname="Mark Nottingham"/>, <contact | |||
<t><list style="symbols"> | fullname="Julian Reschke"/>, <contact fullname="Chris Bentzel"/>, | |||
<t>Issue 168 (make Save-Data extensible) updated ABNF.</t> | <contact fullname="Ben Greenstein"/>, <contact fullname="Tarun | |||
<t>Issue 163 (CH review feedback) editorial feedback from httpwg list.</t> | Bansal"/>, <contact fullname="Roy Fielding"/>, <contact | |||
<t>Issue 153 (NetInfo API citation) added normative reference.</t> | fullname="Vasiliy Faronov"/>, <contact fullname="Ted Hardie"/>, | |||
</list></t> | <contact fullname="Jonas Sicking"/>, <contact fullname="Martin | |||
Thomson"/>, and numerous other members of the IETF | ||||
</section> | HTTP Working Group for invaluable help and feedback.</t> | |||
<section anchor="since-01" title="Since -01"> | </section> | |||
<t><list style="symbols"> | ||||
<t>Issue 200: Moved Key reference to informative.</t> | ||||
<t>Issue 215: Extended passive fingerprinting and mitigation considerations.</ | ||||
t> | ||||
<t>Changed document status to experimental.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-02" title="Since -02"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 239: Updated reference to CR-css-values-3</t> | ||||
<t>Issue 240: Updated reference for Network Information API</t> | ||||
<t>Issue 241: Consistency in IANA considerations</t> | ||||
<t>Issue 250: Clarified Accept-CH</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-03" title="Since -03"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 284: Extended guidance for Accept-CH</t> | ||||
<t>Issue 308: Editorial cleanup</t> | ||||
<t>Issue 306: Define Accept-CH-Lifetime</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-04" title="Since -04"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 361: Removed Downlink</t> | ||||
<t>Issue 361: Moved Key to appendix, plus other editorial feedback</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-05" title="Since -05"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 372: Scoped CH opt-in and delivery to secure transports</t> | ||||
<t>Issue 373: Bind CH opt-in to origin</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-06" title="Since -06"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 524: Save-Data is now defined by NetInfo spec, dropping</t> | ||||
<t>PR 775: Removed specific features to be defined in other specifications</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-07" title="Since -07"> | ||||
<t><list style="symbols"> | ||||
<t>Issue 761: Clarified that the defined headers are response headers.</t> | ||||
<t>Issue 730: Replaced Key reference with Variants.</t> | ||||
<t>Issue 700: Replaced ABNF with structured headers.</t> | ||||
<t>PR 878: Removed Accept-CH-Lifetime based on feedback at IETF 105</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-08" title="Since -08"> | ||||
<t><list style="symbols"> | ||||
<t>PR 985: Describe the bytesize cost of hints.</t> | ||||
<t>PR 776: Add Sec- and CH- prefix considerations.</t> | ||||
<t>PR 1001: Clear CH persistence when cookies are cleared.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-09" title="Since -09"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1064: Fix merge issues with “cost of sending hints”.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-10" title="Since -10"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1072: LC feedback from Julian Reschke.</t> | ||||
<t>PR 1080: Improve list style.</t> | ||||
<t>PR 1082: Remove section mentioning Variants.</t> | ||||
<t>PR 1097: Editorial feedback from mnot.</t> | ||||
<t>PR 1131: Remove unused references.</t> | ||||
<t>PR 1132: Remove nested list.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-11" title="Since -11"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1134: Re-insert back section.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-12" title="Since -12"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1160: AD review.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-13" title="Since -13"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1171: Genart review.</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="since-14" title="Since -14"> | ||||
<t><list style="symbols"> | ||||
<t>PR 1220: AD review.</t> | ||||
</list></t> | ||||
</section> | ||||
</section> | ||||
<section numbered="false" anchor="acknowledgements" title="Acknowledgements"> | ||||
<t>Thanks to Mark Nottingham, Julian Reschke, Chris Bentzel, Ben Greenstein, Tar | ||||
un Bansal, Roy Fielding, Vasiliy Faronov, Ted Hardie, Jonas Sicking, Martin Thom | ||||
son, and numerous other members of the IETF HTTP Working Group for invaluable he | ||||
lp and feedback.</t> | ||||
</section> | ||||
</back> | </back> | |||
<!-- ##markdown-source: | ||||
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 | ||||
AA== | ||||
</rfc> | </rfc> | |||
End of changes. 50 change blocks. | ||||
869 lines changed or deleted | 476 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/ |