Contact emails
[email protected], [email protected], [email protected]
Explainer
https://docs.google.com/document/d/1pvaMg7J5beBXD7trzHJH_MDULc_wRHLx40MFYAmjknE/edit
<https://docs.google.com/document/d/1pvaMg7J5beBXD7trzHJH_MDULc_wRHLx40MFYAmjknE/edit>
Specification
N/A (because there are no web-exposed changes)
Summary
This limited experiment measures how much "pervasive payloads"
contribute to the performance impact of the split HTTP cache in
each Chrome channel over a three-week period. Pervasive payloads
are those third-party payloads included on at least 500 sites and
fetched at least 10M times in a month, based on Chrome's analysis
(payload list included below). This experiment further measures
the impact on Core Web Vitals metrics of restoring pervasive
payloads (and only pervasive payloads) to a single-keyed cache
regime. The privacy benefits of the split HTTP cache are preserved.
Blink component
Blink>Network
<https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3ENetwork>
Motivation
Browsers split HTTP caches based on the top-frame visited origin
(“double-keyed” or "triple-keyed" caching) to prevent sites from
tracking users via a timing attack on a cross-site client cache.
Chrome’s analysis estimates that split caching results in a 3%
increase in cache misses, i.e. fetches for which a payload exists
in the cache of the user's device, but is unavailable to the page
because it was fetched by the user while loading a page from a
different origin. This results in approximately 4% more total
bytes being fetched over the network.
Our analysis further revealed that many of the redundant fetches
caused by split caching were for common payloads associated with
displaying user content (libraries, fonts, widgets, ads) or
common payloads that assist in operating online businesses
(analytics). The delayed arrival of these common payloads
resulted in visible "jank" for users, impacting performance
metrics like LCP <https://web.dev/lcp>, FCP
<https://web.dev/fcp>and CLS <https://web.dev/cls/>. This jank
has been associated with negative effects to online business'
engagement and conversion rates. Furthermore, delayed loads of
analytics and ads payloads can result in missed ads impressions
and dropped analytics hits.
Initial public proposal
This experiment sends a list to Chrome of 100 <URL, hash> pairs
whose payloads are considered pervasive (the "pervasive payloads
list"). During the three-week experiment period, if Chrome
fetches a payload that matches both the URL and its hash on the
pervasive payloads list, it is inserted into a local single-keyed
cache. This payload is then available for use by Chrome when
loading pages on other sites that include the matching URL. All
other fetches for URLs not on the pervasive payloads list are
cached according to the existing split HTTP cache.
The hash covers the payload body and most response headers,
except for those which change on every response.
To ensure we do not degrade the privacy profile of any users
during this experiment, only users with third-party cookies
currently enabled will be eligible for the experiment. We will
compare the experience of users in experiment and control arms
according to total bytes loaded and page performance metrics like
the Core Web Vitals <https://web.dev/vitals>.
The pervasive payloads list was produced by crawling the web and
aggregating the most commonly referenced third-party resource
URLs included in HTML content. We then used pseudonymous
URL-keyed metrics from Chrome to estimate the traffic to sites
and the number of impressions of third-party resources.
Individually identifiable browsing or search histories were not
used in the creation of the pervasive payload list (for more
information about Chrome's data collection policies and privacy
policies, see google.com/chrome/privacy
<https://google.com/chrome/privacy>). The resulting list was
further filtered for any URLs that might contain PII (e.g. URLs
with extensive or opaque query parameters). The list was also
manually reviewed to ensure it included only payloads reasonably
expected to be pervasive; the manual review did not result in any
payloads being removed.
The privacy properties of the split HTTP cache are considered
essential to users and this proposal intends to maintain those
properties, specifically by maintaining split HTTP caching for
all payloads not on the pervasive payloads list.
API semantics are unchanged. User-facing functionality is
unchanged (though we expect performance to be slightly improved).
The list of the top 100 Pervasive URLs for use in this experiment
is pending internal reviews and will be shared on this thread
upon approval.
Future directions
This experiment is the first step in a path exploring improved
handling of pervasive payloads in the browser cache. We outline
the intended future functionality here to clarify the intentions
behind the current experiment. The overview below is not complete
or final and subsequent parts of the design and implementation
will be presented and discussed in further Intents to Experiment
and Prototype.
At a high level, a future improvement to the handling of
pervasive payloads may involve:
*
Assembling a list of pervasive payloads that meets the
following criteria:
o
Maintains the privacy of user browsing histories in its
creation
o
Fairly represents pervasive payloads as they have been
chosen by developers on the web, not payloads selected or
favored by any particular library or browser vendor.
+
This experiment will initially use a static list of
predefined URLs assembled as described in the
'Initial public proposal' section above
+
A future implementation will likely dynamically
update the payloads list on, for example, a weekly
cadence.
*
Implementing shared caching for pervasive payloads that meets
the following criteria:
o
Materially improves load times and responsiveness for web
users(under study in this experiment)
o
Does not create a new tracking vector based on cache
timing attacks
o
Does not require users to fetch payloads before the
browser knows they will need it (i.e. we don't plan to
bundle payloads with browser installs or updates)
o
Does not increase local storage required by browser
installs or caches
To privately and fairly assemble the list of pervasive payloads,
we are exploring the use of Private Heavy Hitters
<https://www.tensorflow.org/federated/tutorials/private_heavy_hitters>.
To implement a privacy-preserving shared cache after the
deprecation of third-party cookies, we are exploring adding a
measure of randomness to the observed presence or absence of a
pervasive payload in the shared cache.
However, this work is only worthwhile if it results in materially
improved load times for real users. This Intent to Experiment
covers only whether or not we should attempt to measure the
performance gains that might be realized ifpervasive payloads
were placed in a shared cache, as one data point among others
that will contribute to discussions about future steps for the
proposal.
TAG review
None yet.
TAG review status
N/A
Risks
Interoperability and Compatibility
Chrome's compliance with the relevant standards is unchanged.
Caching behavior differs between browsers so interoperability
will not be affected.
The list of popular payloads is specifically chosen to minimize
compatibility risks.
Gecko: No signal
WebKit: No signal
Web developers: No signals
Other signals:
WebView application risks
Does this intent deprecate or change behavior of existing APIs,
such that it has potentially high risk for Android WebView-based
applications? No
Debuggability
There is no developer-exposed API for this feature, so most
DevTools support is not relevant. It would be useful to indicate
whether a resource was served from the single-keyed cache in the
network tab, however this will not be implemented in the initial
experiment.
Security and privacy
Single-keyed caching introduces global state shared between
different browsing contexts. A shared cache can introduce
information leaks based on cache probing
(https://xsleaks.dev/docs/attacks/cache-probing/
<https://xsleaks.dev/docs/attacks/cache-probing/>), including
XS-Search (https://xsleaks.dev/docs/attacks/xs-search/
<https://xsleaks.dev/docs/attacks/xs-search/>) in applications
which conditionally load a single-keyed-cache eligible resource
based on authenticated user state. The state of the cache,
queried across different contexts, could also be used as a
fingerprint, permitting user tracking; however, in this case, we
believe this does not provide tracking capabilities beyond those
of third-party cookies.
To protect users during this experiment, we limit the experiment
population to those users with third-party cookies enabled.
Recognizing that third-party cookies will eventually be switched
off for most users <https://privacysandbox.com/>, we are
developing protections such as slightly randomizing cache
hit/miss checks, disallowing eviction, or guaranteeing attempts
to read from the cache reliably populate that cache entry. These
protections will be proposed and incorporated before any future
optimizations are launched.
For the purposes of the current experiment, we will be using the
same implementation of single-keyed caching that Chrome used
before the HTTP cache was partitioned in M77
(https://chromestatus.com/feature/5730772021411840
<https://chromestatus.com/feature/5730772021411840>).
To summarize, the security and privacy restrictions on this
experiment are as follows:
1.
We will exclude users that have third-party cookies disabled.
2.
Only a small percentage of users will be included in the
experiment, reducing the likelihood and impact of any attacks
abusing the single-keyed cache.
3.
We will strictly limit the duration of the experiment on each
channel to 3 weeks.
4.
We will only serve pervasive resources from the single-keyed
cache.
5.
We can turn off the experiment immediately (independent of
browser updates) if any other threats appear.
Is this feature fully tested by web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md>?
This behavior is specific to Chrome and not part of any standard,
so it will not be tested in web platform tests.
Flag name
CacheTransparency
Requires code in //chrome?
No, but the list of popular payloads and the mechanism for
distributing it to the browser will be Chrome-specific.
Tracking bug
https://bugs.chromium.org/p/chromium/issues/detail?id=1309002
<https://bugs.chromium.org/p/chromium/issues/detail?id=1309002>
Launch bug
https://bugs.chromium.org/p/chromium/issues/detail?id=1309353
<https://bugs.chromium.org/p/chromium/issues/detail?id=1309353>
Estimated milestones
M103 for off-by-default experiment
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5768521127559168
<https://chromestatus.com/feature/5768521127559168>
--
You received this message because you are subscribed to the
Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to [email protected].
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA5e6990s-e4aYUnYK5%2BqzQpAyFzJa42y%2B%3D_MAnL19z%3DqemnWg%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA5e6990s-e4aYUnYK5%2BqzQpAyFzJa42y%2B%3D_MAnL19z%3DqemnWg%40mail.gmail.com?utm_medium=email&utm_source=footer>.