Skip to content
All fingerprint checks
HTTP request vs the runtime

Client hints on the wire carry the values JavaScript reports

Pim· Clearcote Research 2 min readCheck id client-hints-wire-vs-js

Every client hint that arrives carries the value its JavaScript counterpart reports at the same moment, within Chrome's own variation for the network estimates. Hints that do not arrive are N/A, and so are non-Chromium engines (severity: warn).

What a detector infers

A server that asks for client hints with Accept-CH receives, on the next request, headers that describe facts JavaScript can also read: Sec-CH-DPR is devicePixelRatio, the device-memory hint is navigator.deviceMemory, ECT, RTT and Downlink are navigator.connection, the Sec-CH-Prefers-* hints are the matching media queries, and the platform version hint is userAgentData's. In Chrome both sides are filled from one source, so they agree.

A value overridden in the page — the usual way to change deviceMemory or the connection — moves the JavaScript side and leaves the headers telling the truth. The probe opts in to twelve hints, fetches an echo endpoint and compares each header with its JavaScript counterpart read at the same moment; the network estimates are allowed the small per-host variation Chrome adds to what a page sees, and everything else must match exactly.

All twelve agreed on Chrome and Edge on Windows, on Linux Chrome and on Playwright's Chromium. The failing side is a set of JavaScript overrides written for the test — device memory, pixel ratio and RTT each disagreeing between header and page — rather than a captured tool.

A hint that never arrives, because a policy or an extension withholds it, is N/A rather than a disagreement. sec-ch-ua-vs-uadata does the same for the brand hints sent on every request; this row covers the hints a server has to ask for.

How to resolve it

Change these values below JavaScript — at launch, for example --force-device-scale-factor for the pixel ratio — or not at all. A page-level override leaves the headers the browser sends describing the real device.

What are User-Agent Client Hints (UA-CH)?

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 client-hints-wire-vs-js belongs to.