Если посмотреть на User-Agent современного Chrome, можно увидеть что-то вроде «Mozilla/5.0 ... AppleWebKit/537.36 ... Chrome/120.0 Safari/537.36» — строку, полную упоминаний браузеров, которыми Chrome на самом деле не является. Это результат десятилетий исторических хитростей, а не случайность.
Истоки слова «Mozilla»
В 1990-х сайты определяли возможности браузера, проверяя, содержит ли User-Agent слово «Mozilla» (тогдашнее кодовое имя Netscape Navigator, лидера рынка). Когда Internet Explorer захотел получать тот же «продвинутый» контент, он начал добавлять «Mozilla» в свой User-Agent — и этот прецедент навсегда закрепился в индустрии.
Яндекс.Браузер и локальный рынок мобильных браузеров
В большинстве регионов рынок мобильных браузеров сводится к связке Chrome/Safari, но в России заметную долю удерживает Яндекс.Браузер — он предустановлен на многих Android-устройствах, продающихся в России, и использует собственный движок на основе Chromium. В его User-Agent обычно присутствует токен YaBrowser/ рядом с обычным Chrome/, поэтому наивный парсинг, который ищет только «Chrome», может ошибочно принять Яндекс.Браузер за обычный Chrome.
Почему User-Agent ненадёжен для детекции браузера
Поскольку каждый новый браузер добавляет в User-Agent строки предшественников ради совместимости, эта строка превратилась в нагромождение исторических артефактов, а не точное описание браузера. Современная лучшая практика — проверять поддержку конкретных функций JavaScript/CSS напрямую, а не парсить User-Agent.
Зачем это нужно
- Диагностировать проблемы совместимости, анализируя, какой именно браузер и версию сообщает клиент.
- Разобраться в серверных логах, где записан User-Agent посетителей.
- Понять, почему старый код детекции браузера по User-Agent часто ошибается.
User-Agent Client Hints как замена
Вместо парсинга одной нагромождённой строки современные браузеры на базе Chromium поддерживают User-Agent Client Hints — отдельные заголовки вроде Sec-CH-UA, Sec-CH-UA-Platform и Sec-CH-UA-Mobile, которые сервер должен явно запросить и получает в структурированном виде. Это часть более широкого тренда на «заморозку» и упрощение User-Agent ради приватности пользователей, так что со временем классическая строка User-Agent будет содержать всё меньше деталей.