What are User-Agent Client Hints, and why is the User-Agent string shrinking?
For decades, a single User-Agent request header carried a browser's name, version, rendering engine and operating system in one freely-readable string. Chromium-based browsers now send a deliberately shorter, more generic version of that string by default, and move the detailed information behind an opt-in mechanism called User-Agent Client Hints — a set of separate, explicitly-requested Sec-CH-UA headers a server has to ask for before receiving.
By AdminKit team, Netbase JSC · Updated November 1, 2026
The string that used to say everything
The User-Agent header, defined by RFC 9110 §10.1.5, lets a client identify the software making a request — in practice, a long string packed with the browser’s name and version, its rendering engine, and the operating system and version it runs on. AdminKit’s user agent tool parses exactly this string and shows what it reveals about your own current connection. Every server you ever requested a page from received the full string, in full detail, on every single request — nothing about reading it required any special permission or opt-in.
That convenience came at a cost the string’s original design never accounted for: a sufficiently detailed, always-present string is a passive fingerprinting signal, read silently by any server without the visitor ever knowing or agreeing to share that level of device detail. Google’s own documentation on User-Agent Reduction names this directly — “the granularity and abundance of detail can lead to user identification,” and its default availability on every request “can lead to covert tracking.”
What actually changed: a shorter string, plus an opt-in channel
Chromium-based browsers (Chrome, Edge and others) now send a deliberately generalized User-Agent string by default: browser brand, a major version number, broad device category (mobile vs. desktop) and platform name stay accurate, while precise OS build numbers, device model and minor browser version get reduced to fixed, generic values instead of the real figure. Nothing about RFC 9110 required this reduction — it’s a browser-vendor privacy decision layered on top of a header the RFC still defines the same way.
In place of the detail that’s now missing by default, the WICG’s User-Agent Client Hints specification defines a set of separate request headers — Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, and more — that a server has to explicitly ask for before receiving. The spec states its own goal plainly: to let “user agents be a bit more aggressive about removing entropy from the User-Agent string generally by giving servers that really need some specific details about the client the ability to opt-into receiving them.” Detail isn’t gone; it’s moved from “sent to everyone automatically” to “sent only to a server that asked.”
Low-entropy vs. high-entropy hints, and how Accept-CH works
Per MDN’s Client Hints documentation, these hints split into two tiers:
- Low-entropy hints —
Sec-CH-UA,Sec-CH-UA-Mobile,Sec-CH-UA-Platform(and the unrelatedSave-Datahint) — carry little enough identifying detail on their own that browsers send them by default, the same way the reduced User-Agent string is sent by default. - High-entropy hints —
Sec-CH-UA-Model,Sec-CH-UA-Platform-Version,Sec-CH-UA-Full-Version-Listand others — carry more identifying detail and are withheld until a server specifically asks for them.
A server asks by sending an Accept-CH response header listing the hints it wants:
Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Platform-Version
The browser then includes those specific headers on its subsequent requests to that same origin. A server that never sends Accept-CH simply never receives the high-entropy hints — it only ever sees the low-entropy defaults, plus whatever the now-generalized User-Agent string still carries.
What this means if you’re reading request headers today
If you’re inspecting what a visitor’s browser actually sends — the same exercise behind what a User-Agent string reveals and verifying a crawler’s User-Agent claim with reverse DNS — a modern Chromium User-Agent string alone will tell you noticeably less than it used to about the exact OS build or device model, by design. If your own site or service genuinely depends on that level of detail (rather than just logging or analytics curiosity), the fix isn’t to keep relying on a string that’s intentionally being hollowed out — it’s to request the specific Sec-CH-UA-* hints you actually need via Accept-CH, and justify each one, since every additional high-entropy hint requested is itself a small step back toward the fingerprinting surface this whole mechanism exists to shrink. The same underlying tension — convenience and identifiability traded off against privacy by withholding detail until it’s explicitly needed — is why consumer operating systems moved to randomized MAC addresses for Wi-Fi by default; User-Agent Client Hints is the same idea applied to the browser’s own request headers.
This guide is general information, not a security audit of your specific network — see our disclaimer for what AdminKit's guidance does and does not commit to.
Frequently asked questions
What was wrong with the old User-Agent string?
Nothing was technically broken — RFC 9110 §10.1.5 simply defines it as a client-supplied identification string with no fixed schema, sent in full on every single request. The practical problem is that a detailed, always-sent string (exact browser build, OS version, sometimes device model) is passively readable by every server a browser talks to, with no user awareness or consent involved — exactly the passive fingerprinting that Google's own User-Agent Reduction documentation names as the motivation for change: "the granularity and abundance of detail can lead to user identification," and its default availability "can lead to covert tracking."
What does a reduced User-Agent string actually look like?
Browser brand, a generalized major version, broad device category (mobile or desktop) and platform name stay accurate; precise OS build numbers, device model and minor browser version are generalized to fixed placeholder-style values instead of the exact figure. A site that genuinely needs more than that has to ask for it explicitly, rather than receiving it automatically in every request header.
What is Sec-CH-UA, and how is it different from the User-Agent header?
Sec-CH-UA is one of several User-Agent Client Hints — separate HTTP request headers, defined by the WICG's User-Agent Client Hints specification, that report structured fields a server opts into individually. Per MDN's Client Hints documentation, a handful of "low-entropy" hints (Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, plus Save-Data) are sent by default since they carry little identifying detail on their own, while higher-detail "high-entropy" hints such as Sec-CH-UA-Model or Sec-CH-UA-Platform-Version are withheld until a server specifically requests them.
How does a server actually request the more detailed hints?
By sending an Accept-CH response header naming which hints it wants — for example Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Full-Version-List — on an earlier response. The browser then includes those specific headers on its subsequent requests to that origin, per the WICG specification's stated goal of "giving servers that really need some specific details about the client the ability to opt into receiving them," rather than every server receiving everything by default.
Does this mean the User-Agent header is going away?
Not entirely — it still exists and is still sent, just with less detail by default than before User-Agent Reduction, and RFC 9110 hasn't deprecated the header itself. Client Hints is additive: a server that does nothing still receives the (now-generalized) User-Agent string it always has; only a server that explicitly opts in via Accept-CH receives the more detailed, structured Sec-CH-UA breakdown instead.
Want AdminKit to watch this for you?
Free checks tell you the state today. Protective DNS and monitoring tell you when it changes.
Talk to an expert
Huy Nguyen (David), Founder & CEO, Netbase JSC
Ask whether this fix applies to your setup, or get a second pair of eyes on your DNS and mail records.