Якщо подивитися на User-Agent сучасного Chrome, побачите щось на кшталт "Mozilla/5.0 ... AppleWebKit/537.36 ... Chrome/120.0 Safari/537.36" — рядок, повний згадок браузерів, якими Chrome насправді не є. Це результат десятиліть історичних хитрощів, а не випадковість.
Витоки слова "Mozilla"
У 1990-х роках сайти визначали можливості браузера, перевіряючи, чи містить User-Agent слово "Mozilla" (тодішня назва Netscape Navigator, лідера ринку). Коли Internet Explorer хотів отримати той самий "просунутий" контент, він почав додавати "Mozilla" у свій User-Agent — і цей прецедент назавжди закріпився в індустрії.
Чому Chrome містить "Safari"
Chrome побудований на движку WebKit, який спершу розробила Apple для Safari. Сайти перевіряли рядок "Safari" в User-Agent, щоб визначити підтримку функцій WebKit, тож Chrome додав це слово, щоб такі перевірки продовжували працювати — навіть попри те, що Chrome давно перейшов на власний форк движка Blink.
Чому User-Agent ненадійний для детекції браузера
Оскільки кожен новий браузер додає до User-Agent рядки попередників заради сумісності, цей рядок перетворився на нагромадження історичних артефактів, а не точний опис браузера. Сучасна найкраща практика — перевіряти підтримку конкретних функцій JavaScript/CSS напряму, а не парсити User-Agent.
Навіщо це потрібно
- Діагностувати проблеми сумісності, аналізуючи, який саме браузер і версію повідомляє клієнт.
- Зрозуміти логи сервера, де записаний User-Agent відвідувачів.
- Розібратися, чому старий код детекції браузера за User-Agent часто помиляється.
User-Agent Client Hints як заміна
Замість того щоб парсити один нагромаджений рядок, сучасні браузери на базі Chromium підтримують User-Agent Client Hints — окремі заголовки на кшталт Sec-CH-UA, Sec-CH-UA-Platform і Sec-CH-UA-Mobile, які сервер має явно запросити й отримує у структурованому, явному форматі. Це частина ширшого тренду на "заморожування" й спрощення User-Agent заради приватності користувачів, тож із часом класичний рядок User-Agent міститиме дедалі менше деталей.