User-Agent
User-Agent — HTTP-заголовок, которым клиент представляется серверу. Изначально задумывался чтобы сервер отдавал подходящую версию контента, но за 30 лет превратился в свалку токенов ради совместимости с говнокодом.
Пример
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Разбор
| Токен | Значит |
|---|---|
Mozilla/5.0 | ритуал совместимости с Netscape (1998) |
Windows NT 10.0 | ОС и версия ядра |
Win64; x64 | архитектура |
AppleWebKit/537.36 | движок (Chromium форкал WebKit) |
KHTML, like Gecko | совместимость с Konqueror/Firefox |
Chrome/125.0.0.0 | реально что за браузер |
Safari/537.36 | ритуал совместимости |
Почему такой цирк
1993 — Mosaic. 1994 — Netscape представился Mozilla/1.0. Сервера начали слать frames только тем кто "Mozilla". IE в 1996 приписал Mozilla/. Дальше — Safari скопировал у IE, Chrome у Safari, Edge у Chrome. Никто не смеет убрать токен — упадёт половина сайтов.
Разные браузеры
# Firefox
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
# Safari iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15
(KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
# Edge
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0
# curl
curl/8.7.1
# Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Для чего используется
- Server-side rendering — определить mobile vs desktop
- Fingerprinting — часть device fingerprint
- Bot detection —
curl/,python-requests/,Go-http-client/легко ловятся - Аналитика — статистика браузеров
- Costs blocking — вражеские UA (spam, парсеры)
User-Agent Client Hints
Google хочет заменить UA на структурированные Client Hints. Chrome шлёт компактный UA + отдельные заголовки:
Sec-CH-UA: "Chromium";v="125", "Not.A/Brand";v="24"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Full-Version-List: "Chromium";v="125.0.6422.60"
Sec-CH-UA-Arch: "x86"
Sec-CH-UA-Model: ""
Дедуплицированно, opt-in через Accept-CH. Safari/Firefox не хотят внедрять — приватность (можно снять модель устройства без разрешения).
UA-Reduction (Chrome)
С 2022 Chrome начал урезать UA — фиксированные значения ОС, minor-версии = 0.0.0. Меньше энтропии для трекеров. Полная информация — через Client Hints с явным запросом.
Как подделать
# curl
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..." https://...
# Chrome DevTools → Network conditions → User agent
# Firefox: about:config → general.useragent.override
Спуфинг = не хвид
UA легко меняется в любой прошивке браузера. Настоящая идентификация железа — HWID и device fingerprinting.