User-Agent парсер: что ваш браузер рассказывает каждому сайту

Работает на нашем сервере — отправленное значение обрабатывается и не сохраняется.

Представление любого браузера — это тридцать лет окаменелостей совместимости, нагромождённых друг на друга. Поэтому Chrome заявляет, что он Safari, и поэтому разбор строки вручную идёт не так. Здесь вашу читают как следует.

Это user-agent, который ваш браузер только что отправил нам.

Это заявленный бот: ClaudeBot

AI Data Scraper, оператор — Anthropic PBC. Такая строка сообщает, что она собой представляет, вместо того чтобы выдавать себя за браузер, — поэтому ей отдают правила robots.txt, а не CAPTCHA.

Разбор идёт на нашем сервере по правилам Matomo device-detector. Строка читается, результат выводится; ничего не сохраняется.

Почему строки user-agent выглядят именно так

Ваш браузер представляется строкой вроде такой:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36

Если читать буквально, это заявка быть сразу Mozilla, и AppleWebKit, и KHTML, и Chrome, и Safari. Это бессмыслица, и бессмыслица не случайная: каждый из этих токенов добавляли, чтобы серверы, проверяющие конкурента, отдавали хорошую версию страницы. Netscape называл себя Mozilla. Internet Explorer называл себя Mozilla, чтобы ему отдавали страницы Netscape. Safari заявлял KHTML, потому что был форком KHTML. Chrome заявлял Safari. Edge заявляет Chrome. Тридцать лет этого — вот во что превратилась строка: окаменелость совместимости, которую уже никто не может убрать, потому что слишком много серверного кода её всё ещё читает.

Вот почему разбирать её вручную — верный способ ошибиться. Очевидная регулярка для Chrome совпадает с Edge, Opera, Brave, Vivaldi и большинством встроенных браузеров Android. Очевидная регулярка для Safari совпадает с любым браузером на Chromium. Чтобы получить правильный ответ, нужен поддерживаемый набор правил на тысячи записей и с известным порядком — его эта страница и использует.

Что делает этот парсер

Он читает строку на нашем сервере по набору правил Matomo device-detector — тот же движок стоит за немалой долей веб-аналитики, развёрнутой на своём сервере, — и раскладывает ответ на клиент, операционную систему и устройство. Начинает он со строки вашего собственного браузера: то, что можно сверить с реальностью, — самый быстрый способ научиться читать следующую.

Вставьте любую строку, чтобы разобрать её вместо этого. Три результата стоит уметь читать:

  • Распознанный браузер. Название, версия, движок, платформа, а на мобильном — производитель и модель.
  • Заявленный бот. Googlebot и его родня говорят, кто они, вместо того чтобы притворяться Chrome. Из-за этой честности им достаются правила robots.txt, а не CAPTCHA.
  • Ничего не распознано. Это результат, а не сбой. Ни один выпускаемый браузер такой строки не отправляет, и сайт, проверяющий user-agent, придёт к тому же выводу и заблокирует. Если вы собрали строку руками для скрапера, вы только что нашли свою проблему.

Прочерк в поле означает, что строка этой информации не несёт. Это всё более обычное дело: Chrome намеренно сокращает то, что раскрывает его user-agent, перенося детали в Client Hints — отдельные заголовки. Парсер не может выдумать то, чего в строке нет, а тот, что заполняет пробелы правдоподобными догадками, хуже того, который их признаёт.

Строка, токен за токеном

Стоит один раз прочитать её целиком, потому что после этого каждая другая строка этого семейства становится очевидной. Возьмём пример с Chrome выше:

  • Mozilla/5.0 — не значит ничего. Его отправляет каждый браузер. Он там потому, что серверы 1990-х проверяли его, прежде чем отдать страницу с фреймами.
  • (Windows NT 10.0; Win64; x64) — блок платформы. Windows NT 10.0 охватывает и Windows 10, и Windows 11: Microsoft не меняла токен, поэтому ни один user-agent не может их различить.
  • AppleWebKit/537.36 (KHTML, like Gecko) — заморожен. Chromium ответвился от WebKit в 2013 году, и с тех пор версия не менялась. Это ископаемое, и строка, которая его «обновляет», — это строка, которую не отправляет ни один браузер.
  • Chrome/131.0.0.0 — настоящая информация. Обратите внимание на нули: Chrome перестал сообщать минорную версию, поэтому значение имеет только мажорный номер.
  • Safari/537.36 — ещё одно ископаемое, совпадающее с версией WebKit выше.

Firefox по сравнению с ним читается легче — Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0 — где rv: и токен Firefox совпадают, а Gecko/20100101 — фиксированная дата, которая ничего не значит с 2010 года. Edge добавляет Edg/131.0.0.0 к в остальном полной строке Chrome, поэтому прочитать её как Chrome — стандартная ошибка разбора.

Где это важно, если вы пользуетесь прокси

User-agent — самое дешёвое, что проверяет сайт, и самое дешёвое, что можно испортить. На четыре ошибки приходится большинство блокировок:

  • Версия, которой больше не существует. Скраперы один раз вставляют user-agent, а потом работают два года. Chrome выпускает мажорную версию каждые четыре недели, поэтому строка, актуальная на момент написания, сейчас — версия, которую никто не использует. Это более чёткий сигнал, чем вообще не отправлять user-agent.
  • User-agent, который противоречит всему остальному. Заявлять Safari на macOS, когда ваш браузер отправляет client hints Chromium, порядок заголовков Chrome и набор шрифтов Windows. Любой из этих признаков проверяют чаще, чем саму строку.
  • Мобильный user-agent с десктопного подключения. Строка iPhone приходит с адреса дата-центра, при экране 2560×1440 и без поддержки касаний. Такое противоречие легко обнаружить, и оно достаточно конкретное, чтобы быть намеренным.
  • Одна и та же строка во всём пуле. 200 адресов, отправляющих один побайтово идентичный user-agent, — это шаблон, и это самый простой для блокировки вид шаблона, потому что одно правило ловит всех.

Если вам нужны актуальные строки, а не разбор, генератор user-agent собирает их из версии вашего собственного браузера, поэтому они не устаревают. И строка — лишь одно из значений, которые читает сайт: считыватель отпечатка показывает остальные, и именно там больше всего противоречий.

Вопросы о Парсер user-agent

Почему в моём user-agent Chrome упоминаются Safari и Mozilla?

История совместимости. Каждый токен добавляли, чтобы серверы, искавшие конкурента, отдавали хорошую версию страницы: IE выдавал себя за Mozilla, Safari — за KHTML, Chrome — за Safari, Edge выдаёт себя за Chrome. Убрать их никто не может, потому что слишком много серверного кода их по-прежнему читает.

Отправляется ли мой user-agent куда-либо?

Она читается на нашем сервере для разбора — и это всё; ничего не записывается. Ваш браузер уже отправляет свой user-agent с каждым запросом к каждому сайту, включая этот, так что здесь нет ничего, чего он нам уже не сообщил.

Что означает прочерк в поле?

Это значит, что строка об этом не сообщает. Chrome намеренно раскрывает меньше, чем раньше, и перенёс подробности в Client Hints — отдельные заголовки, не входящие в строку, которую вы вставили. Парсер, который заполнял бы эти пробелы догадками, был бы хуже того, который честно признаёт их существование.

Парсер не распознал мою строку. Он сломан?

Это результат, а не сбой. Ни один выпускаемый браузер не отправляет нераспознанную строку, и сайт, проверяющий user-agent, отнесётся к ней точно так же. Если вы собрали строку вручную для скрапера, это та самая проблема, которую вы пришли найти.

Насколько точно определяется устройство?

Для всего массового — хорошо, для длинного хвоста Android-устройств — слабее, и это неизбежно: модель можно определить, только если производитель указал её в строке, а набор правил знает эту модель. Настольные браузеры вообще не идентифицируют машину — так задумано.

Стоит ли менять user-agent, чтобы меня не блокировали?

Только на актуальный и согласованный со всем остальным, что вы отправляете. Устаревшая версия или мобильная строка с настольного подключения — более сильный сигнал, чем был бы по умолчанию. Если менять её в отрыве от остального, вы обычно становитесь заметнее, а не менее заметным.

Другие бесплатные инструменты

Все бесплатные инструменты →