Все статьи

User-Agent: почему эта строка такая запутанная

Если посмотреть на 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 будет содержать всё меньше деталей.

Попробовать инструмент