cdpfleet Docs GitHub Dashboard

What a page can read about your browser

Before your code clicks anything, a site has already read the TLS handshake, the header order and dozens of JavaScript properties, and compared them with each other and with your IP. This page maps those signals and what each browser on the fleet sends for each, as measured in our cases and comparisons.

Measurements, not promises. Every claim below links the case that measured it and carries its date. Browsers update every week and anti-bot vendors tune their checks just as often, so treat these as dated snapshots and re-run a case before you rely on it. This is a map of what is visible, not a guide to defeating any particular protection.

The signals at a glance

SignalRead bySet byMeasured in
TLS ClientHello (JA3/JA4)The server, before any HTMLThe browser's network stackcase 01
HTTP/2 SETTINGS and framesThe serverThe network stackcase 01, case 09
Header order and valuesThe serverThe browser, and anything your code changescase 09
User agent and client hintsServer and pageThe browser buildChrome vs Chromium, Chrome vs Brave
navigator: webdriver, plugins, permissions, cores, memory, screenPage scriptsBuild, headless or headful, the hostcase 16, case 05
Canvas and WebGLPage scriptsBuild and GPU (software on the fleet)case 16, case 49
Installed fontsPage scriptsThe OS image, or the personacase 52
WebRTC candidatesPage scriptsBrowser and network pathcase 54
Automation (CDP) side effectsPage scriptsYour automation clientcase 43, case 63
Timezone, locale, geolocation vs IPPage and server togetherContext options, or Camoufox's geoipcase 35, case 15

Before any JavaScript: TLS and HTTP/2

The first packet a server receives is the TLS ClientHello: cipher suites, extensions and their order. Anti-bot systems condense it into a JA3/JA4 fingerprint, and the HTTP/2 SETTINGS and WINDOW_UPDATE frames into an Akamai HTTP/2 fingerprint, then check both against the browser the user agent claims to be. Measured on tls.peet.ws (case 01, 2026-09-30):

Header order and values

Browsers send request headers in a fixed order, and some checks compare that order with the real browser's. Measured with real Chrome on tls.peet.ws (case 09, 2026-09-30):

The user agent string is one of several places a browser names itself. Client hints (Sec-CH-UA headers and navigator.userAgentData) carry brand lists, and a handful of navigator properties give headless and automated browsers away in a millisecond.

SignalWhat we measured
Client-hint brandsChrome sends Google Chrome and Chromium; Playwright's Chromium sends only Chromium, the easiest server-side way to tell them apart (Chrome vs Chromium, 2026-10-07). Edge sends Microsoft Edge (Chrome vs Edge). Brave's user agent is identical to Chrome's, but its hints say Brave with reduced versions (Chrome vs Brave). WebKit has no userAgentData at all (WebKit vs Chromium).
HeadlessChrome in the user agentHeadless Chromium, Chrome and Patchright all say it; headful builds don't (case 05, case 16).
navigator.webdriverfalse on every Chromium build on the fleet, headless included, and on Camoufox. true on Playwright's Firefox and WebKit (case 16, Firefox vs Camoufox, WebKit vs Chromium).
Plugins, permissions, window.chromeHeadless Chromium: 0 plugins, no window.chrome, and Notification.permission *denied* while permissions.query says *prompt*. Headful Chromium fixes all of it with the same build: 5 plugins, consistent permissions, window.chrome present (case 16, 2026-10-04).
Cores, memory, screenChromium builds report the server's own hardware (64 cores and 32 GB in case 16) and a 1280×720 screen: a desktop that doesn't exist. Camoufox reports a consumer machine; Brave farbles cores and screen per session (case 16, Chrome vs Brave).
Platform vs user agentWebKit claims a Mac in its user agent while navigator.platform says Linux x86_64 (WebKit vs Chromium, 2026-10-18).

Canvas, WebGL and audio

Scripts draw text and shapes off-screen and hash the pixels (canvas), read the GPU strings and rendering output (WebGL), or process a tone through the audio stack. The result depends on the engine, fonts and GPU, so it identifies a device without any cookie.

Installed fonts

A script measures the width of text in each candidate font against a fallback; a family that changes the width is installed. Measured with a 46-family probe on Camoufox personas (case 52, 2026-10-16):

WebRTC

WebRTC gathers network candidates for peer connections, and a STUN request can reveal a public address other than the proxy's. Measured behind a sticky residential exit per setup (case 54, 2026-10-16):

Automation side effects (CDP)

An automation client changes how the page behaves: console messages are serialised for the client, and a page can time that. Measured with six setups (case 43, 2026-10-13):

Timezone, locale and geolocation vs the IP

A risk engine compares the browser's clock, languages and position with where its IP is. Defaults that ignore the exit are the cheapest mismatch to spot.

What each fleet browser changes

The same signals, by browser. "Real" means the browser sends its own values, unpatched.

BrowserNetwork (TLS, HTTP/2, headers)Identity (UA, client hints)Device (GPU, canvas, screen, fonts)Automation tells
Chrome, EdgeReal, per browser; Edge's JA4 differs by one extensionReal brands (Google Chrome, Microsoft Edge)The server's: SwiftShader, its cores, one canvas hashHeadlessChrome when headless; CDP side effects
ChromiumReal Chromium; one extension fewer than ChromeChromium only, no Google brandSame as ChromeHeadless tells when headless; CDP side effects
BraveBrave's own JA4, sec-gpc: 1Chrome's user agent, Brave in the hintsFarbled per session and siteSame as Chrome headful on sannysoft
PatchrightReal ChromiumChromiumSame as ChromiumNo console events, cheapest CDP cost; still typed as automation by one test page
CamoufoxReal Firefox (the same on every OS)Firefox on a generated desktop OSA consumer persona; canvas re-seeded per launch, fonts stableFewest flags on the test pages; webdriver false
FirefoxReal FirefoxFirefox on LinuxThe server's: llvmpipe, its coreswebdriver true
WebKitHTTP/1.1 through a proxy, 29 ciphersA Mac UA on a Linux platform, no client hintsThe server'swebdriver true

Camoufox and Firefox are based on Firefox source; cdpfleet is not affiliated with Mozilla. Sources: case 01, case 16, case 63 and the comparisons linked above.

What public bot-test pages concluded

Four public test pages against five fleet browsers on 2026-10-20 (case 63): headless Chromium was flagged by every page; headful Chrome and Patchright passed bot.sannysoft.com except its WebGL renderer check but were still typed as automation by fingerprint.com; WebKit was caught on navigator.webdriver; Camoufox drew the fewest flags, with verdicts that varied from load to load. Which protection vendor a site runs, and the signals each one leaves, is in case 62.

Read next