Почему Edge добавляет "Safari" в User-Agent
20 лет назад война браузеров оставила странное наследие
Если вы когда‑то разглядывали серверные логи, вы, вероятно, видели такую строку.
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47
"Edge, а Safari?"
"Chrome, а Mozilla?"
Как один браузер может одновременно притворяться четырьмя?
Это не просто шутка с строками – это фоссил самой ожесточённой войны браузеров в истории.
И последствия этой войны до сих пор видны в логах серверов в 2025‑м.
В этой статье мы разберём:
- почему все браузеры всё ещё начинаются с
Mozilla/5.0 - почему Chromium‑основанный Edge вынужден «обнимать» Safari
- как этот хаос в итоге будет устранён стандартами
1. Всё началось с войны Netscape vs IE
В конце 1990‑х годов рынок браузеров был фактически монополизирован двумя игроками:
- Netscape Navigator
- Internet Explorer
Тогда User‑Agent Netscape выглядел так:
Mozilla/4.0 (compatible; ...)
Проблема возникла, когда разработчики решили:
"Если в UA есть Mozilla, значит браузер современный. Если нет – старый. Покажем старый код только там."
Таким образом, разделение функционала по строке UA стало нормой.
// 1990‑х style pseudo‑code
if (ua.includes("Mozilla")) {
// код для Netscape / современных браузеров
} else {
// код для старых
}
Другие браузеры возмутились:
"Мы тоже похожи на Netscape, почему нас дискриминируют?"
И все начали добавлять Mozilla в начало UA. Это стало своего рода компатибилити‑марком.
Происхождение названия "Mozilla"
- «Mosaic + Godzilla» → «Mozilla» – популярная теория
- Эмоционально – «сильный как Годзилла»
Но в реальности это просто:
"Я похож на Netscape, не относитесь ко мне как к старому браузеру."
И до сих пор почти все браузеры начинают UA с Mozilla/5.0.
2. Битва движков: WebKit, Gecko, Trident…
В начале 2000‑х браузерные движки разделились так:
- IE → Trident
- Firefox → Gecko
- Safari → WebKit
Разработчики снова использовали UA‑строку для различения браузеров.
const ua = navigator.userAgent;
if (ua.includes("Safari")) {
// код для Safari / WebKit
}
if (ua.includes("Gecko")) {
// код для Firefox
}
if (ua.includes("Trident")) {
// код для IE
}
Проблема в том, что имя движка и бренд смешиваются, делая логику всё более запутанной.
Появление Chrome – «Кто ты?"
Когда Chrome появился, сайты не распознавали его, поэтому UA‑проверка отправляла его в ветку Safari.
Chrome решил: "Давай просто притворимся Safari."
И его UA выглядит так:
Mozilla/5.0 (...)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/xx.xx.xx
Safari/537.36
Значения:
Mozilla/5.0– «Я тоже похож на Netscape»AppleWebKit/537.36– «Мой движок WebKit»(KHTML, like Gecko)– «Соблюдаю совместимость с Gecko»Safari/537.36– «Показываю себя как Safari»Chrome/xx– «Я действительно Chrome»
Таким образом, Chrome стал четырёх‑кратным маскировщиком.
3. Появление Edge – компромисс между идентичностью и выживанием
Microsoft сначала использовал собственный движок EdgeHTML, а затем перешёл на Chromium‑основанный Edge.
Microsoft понимал, что в коде сайтов уже много проверок UA.
Если Edge просто объявил бы:
User-Agent: Edge/101.0.0.0
то:
- Сайты бы не распознались
if (ua.includes("Chrome"))не сработал бы- Пользователи увидели «неподдерживаемый браузер»
Чтобы избежать этого, Edge решил выглядеть как Chrome + Safari.
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47
Разбор:
Mozilla– «Я современный»AppleWebKit– «Мой движок WebKit»Chrome– «Я основан на Chromium»Safari– «Показываю себя как Safari»Edg– «Я Edge»
Это не самопрезентация, а карточка выживания для совместимости с устаревшим кодом.
4. Разбор User‑Agent: 30 лет истории в одной строке
| Токен | Что означает (перевод) |
|---|---|
Mozilla/5.0 |
"Я современный браузер, не относитесь ко мне как к старому." |
AppleWebKit/537.36 |
"Я рендерю как WebKit (Safari)." |
KHTML, like Gecko |
"Я совместим с Gecko (Firefox)." |
Safari/537.36 |
"Я не настоящий Safari, но выгляжу как он." |
Chrome/101.0... |
"Мой движок – Chromium." |
Edg/101.0... |
"Я Edge, но всё остальное – маскировка." |
В этой строке собраны:
- Война Netscape vs IE
- Битва движков Gecko vs WebKit vs Trident
- Доминирование Chrome
- Стратегия выживания Edge
5. User‑Agent становится «историческим мусором»
Современные стандарты считают UA‑строку плохим дизайном:
- Браузеры маскируются → доверие падает
- Строка растёт из‑за компромиссов → усложняет парсинг
- Переходят к User‑Agent Client Hints – более честный подход
Client Hints: «Скажи правду»
Вместо длинных строк серверы запрашивают:
Sec-CH-UA
Sec-CH-UA-Platform
Sec-CH-UA-Mobile
Процесс: 1. Сервер спрашивает нужные данные 2. Браузер отправляет только то, что нужно, в структурированном виде 3. Нет необходимости в парсинге длинных строк
Преимущества: * Браузер не нуждается в трёх‑четырёх маскировках * Сокращается утечка личных данных * Код сервера упрощается
6. Итоги – новый взгляд на «странную строку» в логах
Возвращаясь к исходной строке:
Mozilla/5.0 ... Safari/537.36 ... Edg/101
Это не просто набор символов, а мини‑история:
- Браузерные войны
- Традиции совместимости
- Стратегии выживания
- Текущие стандарты, которые пытаются исправить всё это
И, как всегда, в 2025‑м эта «фоссил» всё ещё появляется в логах.
При следующем просмотре логов, когда вы увидите Mozilla/5.0 ... Safari ... Edg/..., можно улыбнуться и подумать: "Вот ещё один кусок истории." 🙂

Комментариев нет.