Как веб-сервер определяет браузер и ОС клиента?

«Как веб-сервер определяет браузер и ОС клиента?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сервер определяет клиентское окружение (браузер, ОС, устройство) через HTTP-заголовок User-Agent, который браузер отправляет в каждом запросе.

Структура заголовка User-Agent:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
  • Mozilla/5.0 — исторический токен совместимости.
  • (Windows NT 10.0; Win64; x64) — информация об операционной системе.
  • AppleWebKit/537.36 — движок рендеринга.
  • (KHTML, like Gecko) — токены для совместимости.
  • Chrome/91.0.4472.124 — браузер и его версия.
  • Safari/537.36 — указание на совместимость с Safari.

Обработка на сервере (Node.js с Express):

const express = require('express');
const app = express();
const useragent = require('express-useragent'); // Библиотека для парсинга

app.use(useragent.express());

app.get('/', (req, res) => {
    const ua = req.useragent;
    res.send(`
        Браузер: ${ua.browser} (v${ua.version})
        Платформа: ${ua.platform}
        ОС: ${ua.os}
        Это мобильное устройство? ${ua.isMobile}
    `);
});

app.listen(3000);

Важные ограничения и best practices:

  1. Ненадёжность: Заголовок User-Agent легко подделать (например, через настройки браузера или библиотеки вроде requests в Python).
  2. User-Agent Reduction: Современные браузеры (Chrome, Firefox) постепенно сокращают информацию в User-Agent для защиты приватности. Для точного определения устройств теперь рекомендуется использовать Client Hints API.
  3. Использование: Чаще всего User-Agent применяется для:
    • Сбора аналитики и метрик.
    • Обслуживания разных версий контента (например, мобильная vs десктопная версия сайта).
    • Логирования и отладки.