Заголовок User-Agent исторически включался в запросы ставок для предоставления полезных данных таргетинга, таких как браузер и платформа инициирующего устройства. Однако браузеры часто сильно редактируют User-Agent из-за сложности его использования и для лучшей защиты конфиденциальности пользователей. В ответ на это Google поддерживает подсказки клиента User-Agent , которые включаются в запросы ставок, если они доступны, в качестве дополнения к заголовку User-Agent. Эти клиентские подсказки (для краткости) могут быть получены из заголовков Sec-Ch-UA* или из API клиентских подсказок Javascript.
В зависимости от используемого протокола заголовок User-Agent отображается с помощью одного из следующих строковых полей:
- OpenRTB:
BidRequest.device.ua
- Google RTB (устарело):
BidRequest.user_agent
Сообщение UserAgent
будет заполнено подсказками клиента, когда они доступны, но в противном случае оно будет заполнено на основе значений, проанализированных из заголовка User-Agent. В зависимости от используемого протокола это будет отображаться в одном из следующих полей:
- OpenRTB:
BidRequest.device.sua
- Google RTB (устарело):
BidRequest.user_agent_data
Участникам торгов настоятельно рекомендуется использовать сообщение UserAgent
, а не строку User-Agent.
Как заполняется UserAgent
В отличие от заголовка User-Agent, сообщение UserAgent
представляет информацию пользовательского агента, разбитую на несколько полей для конкретной информации.
В зависимости от того, доступны ли в запросе объявления подсказки для клиента, сообщение UserAgent
может быть заполнено следующими способами:
- Если запрос содержит хотя бы подсказки клиента с низкой энтропией ,
UserAgent
заполняется на основе их содержимого. - Если запрос содержит только заголовок User-Agent,
UserAgent
заполняется на основе того, что можно проанализировать из заголовка.
Пример. Заполнение UserAgent
на основе заголовка User-Agent.
Предположим, есть запрос объявления, в котором браузер отправляет следующие заголовки:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
UserAgent
, заполняемый исключительно на основе заголовка User-Agent, может выглядеть следующим образом:
browsers: [{ brand: "Mozilla", version: ["5", "0"] },
{ brand: "AppleWebKit", version: ["537", "36"] },
{ brand: "Chrome", version: ["103", "0", "0", "0"] },
{ brand: "Safari", version: ["537", "36"] }],
platform: { brand: "Windows NT", version: ["10", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
model: "x64",
source: USER_AGENT_STRING
Пример: заполнение UserAgent
на основе подсказок клиента
Предположим, есть запрос объявления, в котором браузер отправляет следующие заголовки:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Sec-Ch-Ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
Sec-Ch-Ua-Arch: x86
Sec-Ch-Ua-Full-Version: 103.0.5060.134
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: Windows
Sec-Ch-Ua-Platform-Version: 15.0.0
В тех случаях, когда включены как минимум подсказки клиента с низкой энтропией, UserAgent
будет заполнен на основе содержимого этих заголовков, даже если заголовки User-Agent присутствуют. Это будет выглядеть следующим образом:
browsers: [{ brand: ".Not/A)Brand", version: ["99", "0", "0", "0"] },
{ brand: "Google Chrome", version: ["103", "0", "5060", "134"] },
{ brand: "Chromium", version: ["103", "0", "5060", "134"] }],
platform: { brand: "Windows", version: ["15", "0", "0"] },
mobile: false,
architecture: "x86",
bitness: "64",
source: CLIENT_HINTS_HIGH_ENTROPY
Заполнение на основе заголовка User-Agent и подсказок клиента
Некоторые поля заполняются по-разному в зависимости от того, основаны ли они на заголовке User-Agent или на подсказках клиента. Ниже приводится краткое изложение этих различий:
- Для идентичных браузеров и платформ
UserAgent.browsers.brand
иUserAgent.platform.brand
часто различаются вUserAgent
на основе заголовка User-Agent или подсказок клиента. Например,UserAgent.platform.brand
может отображаться как «Windows NT», если он основан на заголовке User-Agent, или «Windows», если он основан на подсказках клиента. - Некоторые записи
UserAgent.browsers
уникальны для заголовка User-Agent или для подсказок клиента. Например, «AppleWebKit» появится, еслиUserAgent
основан на заголовке User-Agent, тогда как «Chromium» появится только в том случае, если он основан на подсказках клиента. - Только
UserAgent
, основанный на заголовке User-Agent, может содержать замороженные значения. Например, если используется платформа Windows 11 22H2,UserAgent.platform.brand
будет установлено значение «Windows NT», аUserAgent.platform.version
будет установлено значение[“10”, “0”]
поскольку это замороженное значение для любая версия Windows не ниже 10.
Данные в UserAgent
, основанные на подсказках клиента, обычно не являются неточной заменой замороженной или отредактированной информации. Если существует какое-либо несоответствие между заголовком User-Agent и UserAgent
на основе подсказок клиента, предпочтение следует отдавать информации из UserAgent
.
Поля объекта UserAgent
В этом разделе кратко описаны все поля с упором на поведение Google RTB и рекомендации по их использованию.
Браузеры
Содержит список записей BrandVersion , которые обычно упорядочены по специфике — например, если вам нужно перечислить содержимое browsers
, brand
для каждой записи может отображаться в следующем порядке:
Бренд | Значение |
Мозилла | Совместимость с Mozilla |
AppleWebKit | На основе AppleWebKit, подмножество Mozilla. |
Хром | Браузер Chrome, подмножество браузеров, совместимых с AppleWebKit. |
Сафари | Десктопный вариант, в отличие от мобильного. |
UserAgent
не всегда будет перечислять браузеры в определенном порядке, особенно если он основан на подсказках клиента. Ниже описаны другие различия, которые вы можете увидеть в зависимости от значения source
:
-
USER_AGENT
: полеversion
может быть уменьшено до основной версии или заморожено (зависит от политики конкретного агента). Обратите внимание, что не будет никаких указаний на то, что значение заморожено. -
CLIENT_HINTS_LOW_ENTROPY
иCLIENT_HINTS_HIGH_ENTROPY
: записи не упорядочены по каким-либо критериям; например, один и тот же браузер может отправлять эти записи в разном порядке в каждом запросе. Они также могут содержать запись GREASE , которую следует игнорировать. -
CLIENT_HINTS_HIGH_ENTROPY
: во всех поляхversion
, найденных в браузерах, могут быть установлены полные версии.
Платформа
Запись BrandVersion , описывающая платформу. Это может быть несовместимо с заголовком User-Agent и подсказками клиента, поэтому для ориентации на некоторые платформы может потребоваться проверка двух имен. Например, операционная система Apple Macintosh в заголовке User-Agent обозначается как «Macintosh», а в Client Hints — как «macOS». Ниже описаны другие различия, которые вы можете увидеть в зависимости от значения source
:
-
USER_AGENT
: полеversion
может быть уменьшено до основной версии или заморожено. Обратите внимание, что не будет никаких указаний на то, что значение заморожено. -
CLIENT_HINTS_LOW_ENTROPY
: Полеversion
не будет заполнено. -
CLIENT_HINTS_HIGH_ENTROPY
: в полеversion
может быть установлена полная версия.
мобильный
Указывает, следует ли оптимизировать контент, например рекламу, для маленьких экранов и/или сенсорного ввода. Обратите внимание, что это не обязательно является показателем типа устройства, поскольку мобильные браузеры можно настроить на запрос «сайта для настольного компьютера».
Архитектура
Определяет архитектуру платформы, например «x86» или «arm».
Обратите внимание, что для UserAgent
, основанного на подсказках клиента, он будет заполнен только в том случае, если для параметра source
установлено значение CLIENT_HINTS_HIGH_ENTROPY
.
Битность
Определяет разрядность платформы, например, имеет ли она 32-битный или 64-битный процессор. Поле представляет собой целочисленную строку, предоставляющую дополнительную информацию о его архитектуре; например, архитектура «x86» может иметь битность «32» или «64».
Обратите внимание, что для UserAgent
, основанного на подсказках клиента, он будет заполнен только в том случае, если для параметра source
установлено значение CLIENT_HINTS_HIGH_ENTROPY
.
Модель
Определяет модель устройства. Для мобильных устройств, а не ноутбуков или настольных компьютеров, здесь будет указано название модели, например «Pixel 6 Pro».
Ниже описаны различия, которые вы можете увидеть в зависимости от значения source
:
-
USER_AGENT
- Немобильные устройства: поле
model
часто содержит комбинированное значение архитектуры и разрядности, например «x64» для Windows. Это значение не является кроссплатформенным; например, Linux может использовать «x86_64» для того же оборудования. - Мобильные устройства: это поле не будет включать архитектуру и разрядность. Если вас интересуют эти значения, см.
UserAgent.architecture
иUserAgent.bitness
.
- Немобильные устройства: поле
-
CLIENT_HINTS_LOW_ENTROPY
: полеmodel
не будет заполнено. -
CLIENT_HINTS_HIGH_ENTROPY
: полеmodel
будет заполнено только для модели мобильного устройства. Для настольных платформ значение не установлено.
Источник
Определяет, какие заголовки использовались для создания UserAgent
. Для клиентских подсказок также различаются следующие два случая:
-
CLIENT_HINTS_LOW_ENTROPY
: доступны только базовые подсказки для клиента. -
CLIENT_HINTS_HIGH_ENTROPY
: доступны клиентские подсказки, включая хотя бы одно поле, классифицированное как высокая энтропия.