Сокращение 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 :
Браузер отправляет запрос на загрузку веб-страницы.
- Браузер включает заголовок
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 Браузер включает эту же информацию в заголовки клиентских подсказок User-Agent по умолчанию. Например:
Sec-CH-UA: "Chrome"; v="98" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android"
- Браузер включает заголовок
Сервер может запросить у браузера дополнительные клиентские данные, например, модель устройства, с помощью заголовка ответа
Accept-CH. Например:Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-ModelБраузер применяет политики и пользовательские настройки, чтобы определить, какие данные разрешено возвращать на сервер в заголовках последующих запросов. Например:
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.
Привлекайте и делитесь отзывами
- Испытание Origin : Поделитесь своими отзывами о предыдущих испытаниях Origin .
- Демонстрация : попробуйте нашу демонстрацию сокращения User-Agent .
- GitHub : прочтите пояснение UA-CH , задавайте вопросы и следите за обсуждениями .
Узнать больше
- Улучшение конфиденциальности пользователей и удобства разработчиков : обзор для веб-разработчиков
- Миграция из строки UA в UA-CH : руководство для веб-разработчиков
- Изучение «песочницы конфиденциальности»