← Назад к вопросам

Что браузер вкладывает в заголовки запросов?

2.0 Middle🔥 183 комментариев
#JavaScript Core

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что браузер автоматически добавляет в заголовки HTTP-запросов

Браузер автоматически формирует набор стандартных HTTP-заголовков для каждого запроса, обеспечивая корректную коммуникацию с сервером. Эти заголовки можно разделить на несколько категорий.

Основные автоматические заголовки

Заголовки, связанные с запросом и клиентом:

  • User-Agent – строка, идентифицирующая браузер, его версию, операционную систему и движок рендеринга. Например: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/91.0.4472.124 Safari/537.36.
  • Host – обязательный заголовок для HTTP/1.1, указывает доменное имя и порт сервера. Например: example.com:8080.
  • Accept – предпочтительные типы контента (MIME-типы), которые клиент готов принять. Например: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8.
  • Accept-Language – предпочитаемые языки содержимого. Например: ru-RU, ru;q=0.9, en-US;q=0.8, en;q=0.7.
  • Accept-Encoding – поддерживаемые методы сжатия (например, gzip, deflate, br).
  • Connection – управление соединением (keep-alive для постоянных соединений или close).

Заголовки, связанные с кэшированием и условиями:

  • Cache-Control – директива управления кэшированием (no-cache, max-age, и т.д.).
  • If-Modified-Since – используется для условных GET-запросов, если ресурс был изменён после указанной даты.
  • If-None-Match – содержит значение ETag для проверки актуальности кэшированной версии ресурса.

Заголовки безопасности и происхождения:

  • Referer (опечатка в спецификации, должно быть Referrer) – URL страницы, с которой был совершён запрос.
  • Origin – указывает источник запроса (схема, хост, порт) для CORS и POST-запросов.
  • Sec-Fetch-* – семейство заголовков Fetch Metadata, предоставляющих контекст о том, как и почему был инициирован запрос (Sec-Fetch-Site, Sec-Fetch-Mode, Sec-Fetch-Dest, Sec-Fetch-User).

Заголовки для аутентификации и состояния:

  • Cookie – автоматически отправляет все куки, связанные с доменом запроса.
  • Authorization – добавляется при использовании базовой или токенной аутентификации.

Пример заголовков типичного GET-запроса

GET /api/data HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json, text/plain, */*
Accept-Language: ru-RU, ru;q=0.9, en-US;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://example.com/dashboard
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Cookie: sessionId=abc123; theme=dark

Что можно контролировать разработчику

Разработчик может переопределять или добавлять заголовки:

  • Через XMLHttpRequest или fetch API в JavaScript.
  • Используя методы setRequestHeader() или опцию headers.
// Пример с fetch API
fetch('/api/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Custom-Header': 'custom-value'
  },
  body: JSON.stringify({ key: 'value' })
});

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

  • Браузер запрещает установку некоторых заголовков (User-Agent, Host, Referer, Origin и других), относящихся к категории forbidden header names – это мера безопасности.
  • CORS-запросы могут требовать предварительного OPTIONS-запроса при использовании нестандартных заголовков.

Эволюция заголовков в современных браузерах

Современные браузеры добавляют заголовки безопасности и метаданные:

  • Sec-Fetch-* – помогают серверу защищаться от CSRF-атак и понимать контекст запроса.
  • Priority – указывает приоритет ресурса (например, high для критических CSS).
  • Save-Data – сигнализирует о включённом режиме экономии трафика.

Практическое значение для разработчика

Понимание автоматических заголовков помогает:

  • Оптимизировать кэширование через правильные Cache-Control и условные запросы.
  • Реализовывать мультиязычность, анализируя Accept-Language.
  • Настраивать CORS на сервере, учитывая Origin и Access-Control-Request-Headers.
  • Отлаживать проблемы с аутентификацией (куки, токены) и кэшированием.
  • Повышать безопасность, проверяя Referer и Sec-Fetch-* на сервере.

Браузеры постоянно эволюционируют, и набор автоматических заголовков может меняться, но перечисленные выше составляют устойчивое ядро, необходимое для работы веб-приложений.