Что такое сокращение числа пользовательских агентов?

Сокращение User-Agent (UA) минимизирует идентифицирующую информацию, передаваемую в строке User-Agent, которая может использоваться для пассивного снятия отпечатков . Теперь, когда эти изменения стали общедоступными, все запросы ресурсов имеют сокращённый заголовок User-Agent . В результате сокращается количество возвращаемых значений некоторых интерфейсов Navigator , включая navigator.userAgent , navigator.appVersion и navigator.platform .

Веб-разработчикам следует проверить код своего сайта на предмет использования строки User-Agent. Если ваш сайт использует парсинг строки User-Agent для определения модели устройства, версии платформы или полной версии браузера, вам необходимо реализовать API User-Agent Client Hints .

Подсказки клиента User-Agent (UA-CH)

Подсказки клиента User-Agent позволяют получить доступ ко всему набору данных User-Agent, но только в тех случаях, когда серверы активно заявляют о явной необходимости в определенных фрагментах данных.

Удаляя пассивно раскрываемые пользовательские данные, мы лучше измеряем и сокращаем объем информации, которая намеренно раскрывается заголовками запросов, API JavaScript и другими механизмами.

Зачем нам нужны сниженные показатели UA и UA-CH?

Традиционно строка User-Agent передавала большой объём данных о браузере пользователя, операционной системе и её версии с каждым HTTP-запросом. Это создавало проблемы по двум причинам:

  • Детализация и обилие деталей могут способствовать идентификации пользователя.
  • Доступность этой информации по умолчанию может привести к скрытому слежению.

Сокращение UA и UA-CH повышают конфиденциальность пользователей, поскольку по умолчанию предоставляется только базовая информация.

Сокращенный User-Agent включает в себя название браузера, его версию, источник запроса (настольный компьютер или мобильное устройство), а также платформу. Для доступа к дополнительным данным, User-Agent Client Hints позволяет запрашивать конкретную информацию об устройстве или состоянии пользователя.

Более того, со временем строка User-Agent становилась длиннее и сложнее, что приводило к ошибкам при её разборе. UA-CH предоставляет структурированные и надёжные данные, которые легче интерпретировать. Существующий код, анализирующий строку UA, не должен ломаться (хотя он будет возвращать меньше данных), и вам потребуется перейти на UA-CH, если вашему сайту требуется определённая клиентская информация .

Как работает сокращенный UA и UA-CH?

Вот краткий пример работы сокращённой строки User-Agent и UA-CH. Более подробный пример см. в статье «Улучшение конфиденциальности пользователей и удобства разработки с помощью клиентских подсказок User-Agent» .

Пользователь открывает браузер и вводит в адресную строку example.com :

  1. Браузер отправляет запрос на загрузку веб-страницы.

    1. Браузер включает заголовок User-Agent с сокращённой строкой User-Agent. Например: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. Браузер включает эту же информацию в заголовки клиентских подсказок User-Agent по умолчанию. Например:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. Сервер может запросить у браузера дополнительные клиентские данные, например, модель устройства, с помощью заголовка ответа Accept-CH . Например: Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

  3. Браузер применяет политики и пользовательские настройки, чтобы определить, какие данные разрешено возвращать на сервер в заголовках последующих запросов. Например:

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

Важные советы клиентам

Если вам нужен определённый набор клиентских подсказок в вашем первоначальном запросе, вы можете использовать заголовок ответа Critical-CH . Значения Critical-CH должны быть подмножеством значений, запрошенных Accept-CH .

Например, первоначальный запрос может включать запрос Device-Memory и Viewport-Width , где Device-Memory считается критическим.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Если браузеру требуется критическая подсказка ( Critical-CH ) для корректного отображения веб-страницы, сервер может запросить эту дополнительную информацию с помощью заголовка Accept-CH . После этого браузер может отправить новый запрос на страницу, включающий критическую подсказку.

Подводя итог, Accept-CH запрашивает все необходимые значения для страницы, в то время как Critical-CH запрашивает только подмножество значений, которые необходимы для корректной загрузки страницы. Подробнее см. в спецификации Client Hints Reliability .

Обнаружение планшетных устройств с помощью API UA-CH

Поскольку граница между мобильными устройствами, планшетами и настольными компьютерами становится все менее четкой, а динамические форм-факторы получают все большее распространение (складные экраны, переключение между режимами ноутбука и планшета), целесообразно использовать адаптивный дизайн и функцию обнаружения функций для предоставления соответствующего пользовательского интерфейса.

Однако информация, предоставляемая браузером как для строки User-Agent, так и для подсказок клиента User-Agent, поступает из одного и того же источника, поэтому должны работать одни и те же формы логики.

Например, если этот шаблон проверен в строке UA:

  • Модель телефона: 'Android' + 'Chrome/[.0-9]* Mobile'
  • Шаблон планшета: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

Соответствующий интерфейс заголовков UA-CH по умолчанию можно проверить:

  • Модель телефона: Sec-CH-UA-Platform: "Android" , Sec-CH-UA-Mobile: ?1
  • Шаблон планшета: Sec-CH-UA-Platform: "Android" , Sec-CH-UA-Mobile: ?0

Или эквивалентный интерфейс JavaScript:

  • Шаблон телефона: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • Шаблон планшета: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Для случаев использования, специфичных для оборудования, название модели устройства можно запросить с помощью высокоэнтропийной подсказки Sec-CH-UA-Model .

Как использовать и тестировать сокращенный UA?

Для начала проверьте код своего сайта на наличие и использование строки User-Agent. Если ваш сайт использует парсинг строки User-Agent для определения модели устройства, версии платформы или полной версии браузера, вам необходимо реализовать API UA-CH .

После обновления до API UA-CH необходимо провести тестирование, чтобы убедиться, что вы получаете ожидаемые данные от User-Agent. Существует три способа тестирования, каждый из которых сложнее предыдущего.

Масштабируемая доступность сокращения User-Agent означает, что полностью сокращённая строка UA будет доступна на всех устройствах Chrome. Сокращения начались с выпуска небольшой версии Chrome во втором квартале 2022 года.

Тестируйте пользовательские строки локально

Если вы хотите протестировать свой сайт, используя пользовательские строки User-Agent для имитации различных устройств, запустите Chrome с флагом командной строки --user-agent="Custom string here" . Подробнее о флагах командной строки читайте здесь.

В качестве альтернативы используйте эмулятор устройства в Chrome DevTools.

Преобразуйте строку в коде вашего сайта

Если вы обрабатываете существующую строку user-agent Chrome в клиентском или серверном коде, вы можете преобразовать её в новый формат для проверки совместимости. Вы можете либо переопределить и заменить строку, либо создать новую версию и протестировать её параллельно.

Поддержка клиентских подсказок и критических подсказок

На сервер по умолчанию возвращаются три клиентских подсказки , включая название браузера и его основную версию, логическое значение, указывающее, находится ли браузер на мобильном устройстве, и название операционной системы. Они отправляются после подтверждения соединения по протоколу TLS. Они уже доступны и поддерживаются вашим браузером.

Однако могут возникнуть ситуации, когда вам потребуется извлечь важную информацию для отображения на вашем сайте.

Оптимизируйте критические подсказки

TLS-рукопожатие — это первый шаг к созданию безопасного соединения между браузером и веб-сервером. Заголовок ответа Critical-CH был разработан таким образом, чтобы браузеру было указано немедленно повторить запрос, если первый запрос был отправлен без критической подсказки.

Диаграмма последовательности для клиентских подсказок с критическими подсказками.
При запросе сервером критической подсказки клиент повторно попытается отправить первый запрос на веб-страницу с этой подсказкой. В этом примере подсказка для Sec-CH-UA-Model запрашивается дважды: один раз как подсказка Client с Accept-CH и второй раз как критическая подсказка с Critical-CH .

Для оптимизации критических подсказок ( заголовок Critical-CH ) необходимо перехватить это рукопожатие и предоставить модель для клиентских подсказок. Эти шаги могут быть сложными и требовать глубоких знаний.

HTTP/2- и HTTP/3-фреймы ACCEPT_CH в сочетании с расширением TLS ALPS представляют собой оптимизацию на уровне соединения, позволяющую своевременно доставлять клиентские настройки сервера к первому HTTP-запросу. Для этого требуется сложная настройка, и мы рекомендуем использовать их только для действительно важной информации.

BoringSSL (форк OpenSSL) помогает работать с экспериментальными функциями Google в Chromium. В настоящее время ALPS реализован только в BoringSSL .

Если вам необходимо использовать критические подсказки, обратитесь к нашему руководству по надежности и оптимизации критических подсказок .

Часто задаваемые вопросы

Как долго будут отправляться подсказки, указанные в заголовке Accept-CH ?

Подсказки, указанные через заголовок Accept-CH будут отправляться в течение всего сеанса браузера или до тех пор, пока не будет указан другой набор подсказок.

Работает ли UA-CH с HTTP/2 и HTTP/3?

UA-CH работает как с соединениями HTTP/2, так и с соединениями HTTP/3.

Требуется ли для поддоменов (и CNAME) страница верхнего уровня Permissions-Policy для доступа к высокоэнтропийному UA-CH?

Заголовки UA-CH с высокой энтропией в запросах запрещены в запросах с кросс-источниками независимо от того, как этот источник определен на стороне DNS. Делегирование должно осуществляться через Permissions-Policy для любого подресурса с кросс-источниками или получаться через JavaScript, выполняемый в контексте кросс-источников.

Как сокращение User-Agent влияет на обнаружение ботов?

Изменение строки User-Agent в Chrome не оказывает прямого влияния на строку User-Agent, которую бот выбирает для отправки.

Боты могут обновлять свои строки, чтобы отразить сокращённую информацию, отправляемую Chrome, но это полностью зависит от их реализации. Chrome по-прежнему отправляет тот же формат User-Agent, и боты, добавляющие свой идентификатор в конец строки Chrome User-Agent, могут продолжать это делать.

Если у вас возникли какие-либо вопросы по поводу конкретных ботов, возможно, стоит обратиться непосредственно к их владельцам и спросить, планируют ли они изменить строку User-Agent.

Привлекайте и делитесь отзывами

Узнать больше