Заголовок 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-документ.
З цієї причини більшість веббраузерів використовують значення рядка користувацького агента наступним чином:
Наприклад, 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].
Примітки
- ↑ Fielding, Roy T.; Nottingham, Mark; Reschke, Julian (2022–06). HTTP Semantics. № RFC 9110. Процитовано 1 травня 2025.
{{cite news}}: Обслуговування CS1: Сторінки з неправильним форматом в діапазонах дат (посилання) - ↑ 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: Сторінки з неправильним форматом в діапазонах дат (посилання) - ↑ Murchison, Kenneth; Kohn, Dan; Lindsey, Charles (2009–11). Netnews Article Format. № RFC 5536. Процитовано 1 травня 2025.
{{cite news}}: Обслуговування CS1: Сторінки з неправильним форматом в діапазонах дат (посилання) - ↑ Eckersley, Peter (27 січня 2010). Browser Versions Carry 10.5 Bits of Identifying Information on Average. Electronic Frontier Foundation. Процитовано 25 серпня 2011.
- ↑ WebAIM: History of the browser user-agent string. webaim.org. Процитовано 1 травня 2025.
- ↑ Opera News. Opera News. 30 квітня 2025. Процитовано 1 травня 2025.
- ↑ Pemberton, Stephen. W3C Markup Validation Service. W3C. Процитовано 18 жовтня 2011.
- ↑ Clary, Bob (10 лютого 2003). Browser Detection and Cross Browser Support. Mozilla Developer Center. Mozilla. Архів оригіналу за 17 листопада 2011. Процитовано 30 травня 2009.
- ↑ Android Browser Reports Itself as Apple Safari. Архів оригіналу за 6 серпня 2011. Процитовано 9 серпня 2011.
- ↑ 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
- ↑ Chrome Phasing out Support for User Agent. InfoQ. Процитовано 25 березня 2020.
- ↑ Cimpanu, Catalin. Google to phase out user-agent strings in Chrome. ZDNet (англ.). Процитовано 25 березня 2020.
- ↑ User-Agent Reduction. www.chromium.org. Процитовано 13 липня 2023.
- ↑ Firefox Release Notes. mozilla.org. Процитовано 8 квітня 2023.
- ↑ www.bestbuy.com - Firefox is an unsupported browser. github.com. Процитовано 8 квітня 2023.
- ↑ Schubert, Dennis. Freeze 'rv:' segment in the User Agent string to 'rv:109.0' to avoid erroneous IE11 detection. bugzilla.mozilla.org. Процитовано 8 квітня 2023.
- ↑ Peterson, Chris. Remove the frozen 'rv:109.0' IE11 UA workaround after Firefox reaches version 120 (desktop and Android). bugzilla.mozilla.org. Процитовано 8 квітня 2023.