При посещении веб-сайта браузер или другое клиентское приложение обычно посылает веб-серверу информацию о себе. Эта текстовая строка является частью HTTP-запроса. Она начинается с User-agent: или User-Agent: и обычно содержит название и версию приложения, операционную систему компьютера и язык. Например, Chrome под Android посылает что-то вроде такого:

User-Agent: Mozilla/5.0 (Linux; Android 9; Pixel 2 XL Build/PPP3.180510.008) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Mobile Safari/537.36

Но разработчики Chrome считают, что это слишком подробная информация. Они объявили о решении отказаться от user-agent в браузере Chrome. Вместо этого Chrome предложит новый API под названием Client Hints, который позволит лучше контролировать, какая информация передаётся веб-сайтам.

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

Строка User-Agent впервые появилась в Mosaic, популярном браузере начала 90-х. Тогда браузер отправлял просто строку с названием и версией браузера. Строка выглядела примерно так:

Mosaic/0.9

В первое время от этой информации было мало практической пользы. Через несколько лет вышел браузер Netscape, он перенял у предшественника строку user-agent и добавил к неё дополнительные детали, такие как операционная система, язык и т. д. Примерно с этого времени веб-сайты начали учитывать user-agent, чтобы выдавать клиенту правильный контент.

Поскольку Mosaic и Netscape поддерживали разный набор функций, веб-сайты должны были использовать строку user-agent, чтобы определить тип браузера и избежать использования неподдерживаемых функций (например, фреймы поддерживались только Netscape, но не Mosaic).

В течение многих лет определение версии браузера продолжало играть значительную роль в веб-разработке. Это вызвало неприятные побочные эффекты, когда мелким разработчикам браузеров приходилось имитировать популярные user-agent'ы для корректного отображения веб-сайта, поскольку некоторые компании поддерживали только основные типы user-agent.

С ростом популярности JavaScript большинство разработчиков начали использовать библиотеки вроде Modernizer, которые определяют конкретный список функций HTML, CSS и JavaScript, которые поддерживает конкретный браузер, обеспечивая гораздо более точные результаты, чем user-agent.

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

По иронии, Google считается одним из главных нарушителей приватности. Именно эта компания собирает самые подробные профили пользователей, собирая данные из электронной почты, GPS-трекеров, операционной системы Android и десятков своих веб-сервисов.

Более того, именно Google в последнее время чаще всех злоупотребляла user-agent, блокируя доступ к своим сервисам пользователей с альтернативными браузерами. Чтобы открыть эти сервисы, альтернативным браузерам приходилось подделывать строку user-agent и выдавать себя за Chrome. Например, см. список поддельных user-agent для браузера Microsoft Edge, который тоже вынужден выдавать себя за Chrome на десятках сайтов.

Gmail, Google Maps и другие сервисы работают медленнее во всех браузерах, кроме Chrome.

Но бывает, что интересы отдельных разработчиков идут вразрез с интересами работодателя. Возможно, здесь как раз такой случай. Мы и раньше видели, как разработчики Chrome выражали протест некорректными действиями компании, когда она выкатывала сервисы «только для Chrome». Они выражали недовольство в твиттере и во внутренней корпоративной рассылке. Это действительно грамотные специалисты, у которых неадекватные решения руководства Google не могли вызвать ничего, кроме недоумения и фейспалма. Похоже, сейчас пришло время для конкретных действий.

Команда разработчиков браузера Chrome начала поэтапный отказ от user-agent, начиная с версии Chrome 81. Отказ от user-agent значительно затруднит Google некорректные практики по продвижению своего браузера.

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

В частности, со всех мобильных устройств Chrome будет отправлять такую строку:

Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.1.2222.33 Mobile Safari/537.36

Со всех настольных компьютеров строка будет выглядеть следующим образом, независимо от устройства и версии браузера:

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

Переход с user-agent на Client Hints планируется завершить к версии Chrome 85, которая должна выйти в сентябре 2020 года. Другие разработчики браузеров, включая Mozilla Firefox, Microsoft Edge и Apple Safari, выразили поддержку этому шагу, хотя пока не огласили свои планы по аналогичным действиям.

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

Главное отличие Client Hints от user-agent в том, что сайты больше не будут пассивно получать информацию о браузере пользователя. Они будут вынуждены активно запрашивать её, а браузер может отказать в таком запросе, примерно так же, как сейчас некоторые браузеры блокируют сторонние куки.