v145 · Networking · Connection Fingerprint Lab

Connection fingerprint lab

Fire N parallel requests, watch the browser open connections in batches, and measure the (former) signal — how many sockets a tracker could observe before Chrome 145 randomised the limit.

scenario

completed0
p50 time-to-first-byte— ms
p95 time-to-first-byte— ms
burst total wallclock— ms
observed step count

why this matters

Trackers used to fire timing probes and count how many concurrent socket completions surfaced before the next batch — that count revealed the 6-per-origin socket pool limit (or the 32 global cap). Chrome 145 jitters the limit per origin, breaking the signal. The burst above runs against this same origin so you can see how clean (or noisy) the step pattern looks.

code

// Fire many fetches in parallel and record start/end times.
const t0 = performance.now();
const results = await Promise.all(
  Array.from({ length: N }, (_, i) => {
    const start = performance.now();
    return fetch('/echo?' + i).then(r => r.text()).then(() => ({
      start, end: performance.now(),
    }));
  })
);
// Sort by end time, count batches separated by > 50 ms gap.

see also