Что браузер вкладывает в заголовки запросов?
Комментарии (3)
Ответ сгенерирован нейросетью и может содержать ошибки
Что браузер автоматически добавляет в заголовки 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илиfetchAPI в 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-*на сервере.
Браузеры постоянно эволюционируют, и набор автоматических заголовков может меняться, но перечисленные выше составляют устойчивое ядро, необходимое для работы веб-приложений.