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
в том, что сайты больше не будут пассивно получать информацию о браузере пользователя. Они будут вынуждены активно запрашивать её, а браузер может отказать в таком запросе, примерно так же, как сейчас некоторые браузеры блокируют сторонние куки.
RSalo
По-умолчанию этого точно не будет. Возможно, что нужно будет в заголовке или где-то еще отправлять параметры для включения этой опции. Если она не включена, то будет в консоли крик об этом…
И вообще, кому надо, тот будет отправлять и так всю инфу в дополнительных параметрах запроса. Так что отключение юзер-агента ничем особо не спасет.