Почему 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/..., можно улыбнуться и подумать: "Вот ещё один кусок истории." 🙂

image