How to Parse User Agents
Extract browser, operating system, and device information from User-Agent strings.
Problem
You have a User-Agent string and need to identify the browser, OS, and device type.
Prerequisites
- Understanding of HTTP headers
- Knowledge of User-Agent format
Steps
-
1. Understand the User-Agent format
User-Agent strings contain product tokens separated by spaces, each with a name and optional version. The order and content vary by browser. Modern browsers include compatibility tokens (like Mozilla/5.0) for historical reasons, making parsing complex.
InputMozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/118.0Outputtokens identified -
2. Parse with a UA parser library
Use a dedicated User-Agent parser rather than regex. UA strings are notoriously inconsistent and full of compatibility tokens. A maintained parser library (like ua-parser) uses pattern databases updated for new browsers and devices.
InputUA stringOutputbrowser: Chrome 118, OS: Windows 10, device: desktop -
3. Use the results appropriately
Use parsed data for analytics, compatibility decisions, or content negotiation. Be aware that User-Agents can be spoofed. Do not make security decisions based solely on UA parsing. Consider Client Hints as a more structured alternative.
Inputparsed UAOutputused for analytics
Expected result
Browser, OS, and device information extracted from the User-Agent string.
Common errors
- Parsing with regex misses new browsers
- Use a maintained UA parser library with an updated pattern database. Regex-based parsing breaks on new UA formats.
- Trusting UA for security decisions
- User-Agents are client-controlled and can be spoofed. Never use UA alone for authentication or authorization.
Troubleshooting
- If parsing returns 'unknown', the UA may be from a bot, app, or new browser. Update the parser database.
- Client Hints (Sec-CH-UA) provide structured browser data and are more reliable than UA strings.
Security limits
- User-Agent strings are spoofable. Never rely on them for security. Use feature detection instead of UA sniffing for browser compatibility.