Skip to content
All fingerprint checks
HTTP request vs the runtime

A cacheable resource fetched twice comes from cache the second time

Pim· Clearcote Research 2 min readCheck id http-cache-honoured

The second fetch of the resource is served from the HTTP cache. N/A under a controlling service worker, and when Resource Timing does not record both fetches (severity: warn).

What a detector infers

A browser that is allowed to cache a response does. The probe fetches an immutable, cacheable resource unique to this visit twice, then reads Resource Timing for the second fetch: an ordinary browser serves it from its HTTP cache, which shows as a transfer size of 0 or a cache delivery. Request interception through the DevTools protocol changes that.

Playwright turns interception on when a script uses route(), when it sets httpCredentials, and when its proxy needs credentials — and with interception on, Chrome stops serving from the HTTP cache, so both fetches go to the network. Measured by counting requests at the server: Chrome and Edge on Windows, Linux Chrome and plain Playwright all sent one; Playwright with route() and Playwright with httpCredentials sent two.

Interception is set up below the page, so nothing a script removes from the page restores the cache. Two honest exceptions: DevTools' own 'Disable cache' box does the same thing for a developer, and a service worker in front of the request answers from its own cache, so a controlling service worker makes the row N/A. It differs from request-cache-headers, which reads the headers on the first request; this row reads whether the second one went to the network at all.

How to resolve it

Do not route requests through the automation client: drop route() handlers and httpCredentials, and give a proxy its credentials at the network layer — an allow-listed IP or a local forwarder that adds them — instead of answering the proxy's challenge through interception.

How automation gets caught, layer by layer

Nearby checks in HTTP request vs the runtime

See all 10 checks in HTTP request vs the runtime
Who builds this test

Clearcote is a browser built for fingerprint coherence

It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.

This audit takes no position on how Clearcote scores on HTTP request vs the runtime checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.

See the other checks in HTTP request vs the runtime — the family http-cache-honoured belongs to.