Skip to main content

User-Agent Client Hints and UA reduction

Chromium-based browsers send a reduced User-Agent string: the details that identified a device most precisely are frozen to fixed values, and the precise data moved to User-Agent Client Hints (UA-CH), which a site has to request. This guide parses a legacy Chrome on Android string next to a reduced one.

Worked example

Legacy Chrome on Android (before reduction)
Mozilla/5.0 (Linux; Android 12; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Mobile Safari/537.36
Browser
Chrome 99.0.4844.88
Engine
Blink
Operating system
Android 12
Device class
Mobile
Device
Samsung SM-G991B
CPU architecture
Unknown
Bot / crawler
No
Reduced Chrome on Android
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36
Browser
Chrome 120.0.0.0
Engine
Blink
Operating system
Android 10
Device class
Mobile
Device
K
CPU architecture
Unknown
Bot / crawler
No

The legacy string exposes Android 12, the Samsung model SM-G991B and the full version 99.0.4844.88. In the reduced string, Android 10 and the model K are placeholders that every Android device sends, and the version ends in .0.0.0. The parser reports exactly what the string says β€” Android 10, model K β€” so only the major version 120 and the Mobile token still carry real information.

Low-entropy hints a Chromium browser sends by default, and an Accept-CH response header asking for more
Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List

Key rules

  • Reduced Chrome strings keep only the major version; minor, build and patch are always 0.0.0.
  • On Android, the OS version is fixed at 10 and the device model is replaced with K. On desktop, the platform is frozen to values such as Windows NT 10.0; Win64; x64, Macintosh; Intel Mac OS X 10_15_7 or X11; Linux x86_64.
  • Over HTTPS, Chromium browsers send three low-entropy hints by default: Sec-CH-UA (brands and major versions), Sec-CH-UA-Mobile and Sec-CH-UA-Platform.
  • Detailed hints such as Sec-CH-UA-Platform-Version, Sec-CH-UA-Model and Sec-CH-UA-Full-Version-List are sent only after the server asks for them in an Accept-CH response header. In JavaScript, use navigator.userAgentData.getHighEntropyValues().
  • The brand list includes a deliberately fake "GREASE" entry such as "Not_A Brand". Look for the brand you need instead of comparing the whole header.
  • Windows 11 still sends Windows NT 10.0 in the User-Agent string; a Sec-CH-UA-Platform-Version of 13.0.0 or higher identifies Windows 11.
  • Client hints are a Chromium feature, so keep a User-Agent fallback for other browsers. This parser reads only the User-Agent string, not client hints.

More user agent guides