Заголовок User-Agent

У комп'ютерних науках, заголовок User-Agent це заголовок HTTP, призначений для ідентифікації агента користувача, який виконав HTTP-запит. У той час як послідовність символів User-Agent є назвою самого заголовка, значення заголовку, яке використовується агентом користувача щоб ідентифікувати самого себе, у просторіччі відоме як рядок агента користувача. Агент користувача, який використовується оператором комп’ютера для доступу до Інтернету, має вбудовані у правила його поведінки знання про те, як узгоджувати свою частину транзакції типу «запит-відповідь»; отже, агент користувача виконує роль клієнта в архітектурі клієнт-сервер. Часто вважається корисним в мережах можливість ідентифікувати та розрізняти програмне забезпечення, що забезпечує мережевий сеанс. Для цього, заголовок User-Agent існує для ідентифікації клієнтського програмного забезпечення відповідаючим сервером.

Використання в запитах клієнтів

Коли агентське програмне забезпечення працює в межах мережевого протоколу, воно часто ідентифікує себе, свій тип застосунку, операційну систему, модель пристрою, постачальника або версію програмного забезпечення, передаючи характерний ідентифікаційний рядок своєму мережевому аналогу. У протоколах HTTP,[1] SIP[2] та NNTP[3] ця ідентифікація передається в заголовку User-Agent. Боти, зокрема веб-сканери, часто також додають URL-адресу та/або електронну пошту, щоб вебмайстер міг зв’язатися з оператором бота.

У протоколі HTTP "рядок агента користувача" часто використовується для узгодження вмісту, коли сервер вибирає найбільш підходящий вміст або параметри для відповіді. Наприклад, рядок агента користувача може використовуватися веб-сервером для вибору варіантів на основі відомих можливостей конкретної версії клієнтського програмного забезпечення. Концепція адаптації контенту вбудована в стандарт HTTP в RFC 1945 "для адаптації відповідей, щоб уникнути окремих обмежень агентів користувача".

Рядок агента користувача – це один із критеріїв, за яким веб-сканери можуть бути виключені з доступу до певних частин веб-сайту за допомогою Стандарту виключення роботів (файл robots.txt).

Як і у випадку з багатьма іншими заголовками HTTP-запитів, інформація в рядку агента користувача впливає на інформацію, яку клієнт надсилає серверу, оскільки рядок може значно відрізнятися від користувача до користувача.[4]

Формат для веббраузерів, якими керує людина

Формат рядка агента користувача наразі визначається розділом 10.1.5 семантики HTTP. Формат рядка агента користувача в HTTP — це список токенів продукту (ключових слів) з необов'язковими коментарями. Наприклад, якщо продукт користувача називатиметься WikiBrowser, рядок його агента користувача може бути WikiBrowser/1.0 Gecko/1.0. «Найважливіший» компонент продукту вказаний першим.

Частини цього рядка такі:

  • назва та версія продукту (WikiBrowser/1.0)
  • рушій та версія макета (Gecko/1.0)

Під час першої війни браузерів багато веб-серверів були налаштовані на надсилання веб-сторінок, що потребували розширених функцій, включаючи фрейми, клієнтам, які були ідентифіковані лише як деякі версії Mozilla.[5] Інші браузери вважалися старими продуктами, такими як Mosaic, Cello або Samba, і отримували лише базовий HTML-документ.

З цієї причини більшість веббраузерів використовують значення рядка користувацького агента наступним чином:

Mozilla/[версія] ([інформація про систему та браузер]) [платформа] ([деталі про платформу]) [розширення]

Наприклад, Safari на iPad використовував наступне:

Mozilla/5.0 (iPad; CPU OS 16_7_10 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Version/16.7.10 Safari/605.1.15

Компоненти цього рядка такі:

  • Mozilla/5.0 : Раніше використовувалося для позначення сумісності з рушієм рендерингу Mozilla.
  • (iPad; CPU OS 16_7_10 like Mac OS X): Відомості про систему, на якій працює браузер.
  • AppleWebKit/605.1.15: Платформа, яку використовує браузер.
  • (KHTML, like Gecko): Відомості про платформу браузера.
  • Mobile/15E148: Цей код використовується браузером для позначення певних покращень, доступних безпосередньо в браузері або через сторонні розробники.
  • Version/16.7.10: Версія операційної системи.
  • Safari/605.1.15: Версія браузера

До переходу на кодову базу Chromium, Opera була найпоширенішим веб-браузером, чий рядок агента користувача не містив «Mozilla» (натомість він починався з «Opera»). З 15 липня 2013 року[6] рядок агента користувача Opera починається з «Mozilla/5.0» і, щоб уникнути конфліктів зі старими правилами серверів, більше не містить слова «Opera» (замість цього використовується рядок «OPR» для позначення версії Opera).

Формат для автоматизованих агентів (ботів)

Автоматизовані інструменти веб-сканування можуть використовувати спрощену форму, де важливим полем є контактна інформація на випадок виникнення проблем. За домовленістю, слово "бот" включається до назви агента. Наприклад:

Googlebot/2.1 (+http://www.google.com/bot.html)

Очікується, що автоматизовані агенти дотримуватимуться правил у спеціальному файлі під назвою "robots.txt".

Перехоплення User agent

Перехоплення User agent (user agent sniffing) – це практика, коли веб-сайти відображають різний або змінений вміст під час перегляду на підставі певних значень User agent. Прикладом цього є функція Outlook Web Access у Microsoft Exchange Server 2003. Під час перегляду в Internet Explorer 6 або новішої версії відображається більше функцій порівняно з тією ж сторінкою в будь-яких інших браузерах. Перехоплення користувацьких агентів вважається поганою практикою, оскільки воно заохочує дизайн, специфічний для браузера, та карає нові браузери з нерозпізнаними ідентифікаторами користувацьких агентів. Натомість W3C рекомендує створювати стандартну розмітку HTML[7], що дозволяє правильне відображення в якомога більшій кількості браузерів, та тестувати певні функції браузера, а не певні версії чи бренди браузерів[8].

Підміна заголовка User-agent

Популярність різних веб-браузерів змінювалася протягом історії Інтернету, і це вплинуло на дизайн веб-сайтів таким чином, що веб-сайти іноді розробляються для належної роботи лише з певними браузерами, а не відповідно до єдиних стандартів Консорціуму Всесвітньої павутини (W3C) або Робочої групи з інтернет-інженерії (IETF). Веб-сайти часто містять код для визначення версії браузера для того, щоб налаштувати дизайн сторінки, що надсилається, відповідно до отриманого рядка User-agent. Це може означати, що менш популярним браузерам не надсилається складний контент (навіть якщо вони можуть правильно з ним обробляти) або, в крайніх випадках, відмовляють у контенті в цілому. Таким чином, різні браузери мають функцію маскування або підробки своєї ідентифікації, щоб примусити серверну сторону надсилати певний контент. Наприклад, браузер Android ідентифікує себе як Safari (серед іншого), щоб покращити сумісність[9][10].

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

Результатом підміни користувацького агента може бути неточність зібраної статистики використання веб-браузера.

Застаріння заголовка User-Agent

У 2020 році Google оголосив, що заморожуватиме частини заголовка User-Agent у своєму браузері Chrome, оскільки він більше не використовувався для визначення можливостей браузера, а натомість використовувався переважно для пасивного відбитка пальця браузера[11]. Google заявив, що нова функція під назвою Client Hints замінить функціональність рядка user agent[12].

Починаючи з Chrome 113, випущеного у квітні 2023 року, заголовок User-Agent був частково заморожений. User-agent у новішій версії Chrome залишався статичним, за винятком цифр, які представляли основну версію використовуваного браузера[13].

Хибна ідентифікація браузера

Починаючи з виходу Firefox 110 у лютому 2023 року[14], Mozilla оголосила, що тимчасово заморозить частини рядка користувацького агента браузера у версії 109. Це було зроблено через те, що кілька веб-сайтів неправильно розпізнавали розробницьку версію браузера (яка ідентифікувала себе за рядком Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0 ) Gecko/20100101 Firefox/110.0 )[15] як застарілий Internet Explorer 11 (який повідомляє про Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0 ) like Gecko )[16]. Підміну цієї версії було припинено для Firefox 120 і новіших, оскільки проблема спостерігалася лише у браузерах, які ідентифікують себе як браузери з 110 по 119[17].

Примітки

  1. Fielding, Roy T.; Nottingham, Mark; Reschke, Julian (2022–06). HTTP Semantics. № RFC 9110. Процитовано 1 травня 2025.{{cite news}}: Обслуговування CS1: Сторінки з неправильним форматом в діапазонах дат (посилання)
  2. Schooler, Eve; Rosenberg, Jonathan; Schulzrinne, Henning; Johnston, Alan; Camarillo, Gonzalo; Peterson, Jon; Sparks, Robert; Handley, Mark J. (2002–07). SIP: Session Initiation Protocol. № RFC 3261. Процитовано 1 травня 2025.{{cite news}}: Обслуговування CS1: Сторінки з неправильним форматом в діапазонах дат (посилання)
  3. Murchison, Kenneth; Kohn, Dan; Lindsey, Charles (2009–11). Netnews Article Format. № RFC 5536. Процитовано 1 травня 2025.{{cite news}}: Обслуговування CS1: Сторінки з неправильним форматом в діапазонах дат (посилання)
  4. Eckersley, Peter (27 січня 2010). Browser Versions Carry 10.5 Bits of Identifying Information on Average. Electronic Frontier Foundation. Процитовано 25 серпня 2011.
  5. WebAIM: History of the browser user-agent string. webaim.org. Процитовано 1 травня 2025.
  6. Opera News. Opera News. 30 квітня 2025. Процитовано 1 травня 2025.
  7. Pemberton, Stephen. W3C Markup Validation Service. W3C. Процитовано 18 жовтня 2011.
  8. Clary, Bob (10 лютого 2003). Browser Detection and Cross Browser Support. Mozilla Developer Center. Mozilla. Архів оригіналу за 17 листопада 2011. Процитовано 30 травня 2009.
  9. Android Browser Reports Itself as Apple Safari. Архів оригіналу за 6 серпня 2011. Процитовано 9 серпня 2011.
  10. User Agent String explained: Android Webkit Browser. UserAgentString.com. Архів оригіналу за 4 травня 2012. Процитовано 29 липня 2012. Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
  11. Chrome Phasing out Support for User Agent. InfoQ. Процитовано 25 березня 2020.
  12. Cimpanu, Catalin. Google to phase out user-agent strings in Chrome. ZDNet (англ.). Процитовано 25 березня 2020.
  13. User-Agent Reduction. www.chromium.org. Процитовано 13 липня 2023.
  14. Firefox Release Notes. mozilla.org. Процитовано 8 квітня 2023.
  15. www.bestbuy.com - Firefox is an unsupported browser. github.com. Процитовано 8 квітня 2023.
  16. Schubert, Dennis. Freeze 'rv:' segment in the User Agent string to 'rv:109.0' to avoid erroneous IE11 detection. bugzilla.mozilla.org. Процитовано 8 квітня 2023.
  17. Peterson, Chris. Remove the frozen 'rv:109.0' IE11 UA workaround after Firefox reaches version 120 (desktop and Android). bugzilla.mozilla.org. Процитовано 8 квітня 2023.