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

Что передается в Headers запроса HTTP?

1.0 Junior🔥 291 комментариев
#Браузер и сетевые технологии

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Что передается в Headers запроса HTTP

HTTP Headers (заголовки) - это метаинформация, которая передается вместе с HTTP запросом. Они помогают браузеру и серверу общаться и обмениваться важной информацией о запросе и ответе.

Структура HTTP запроса с Headers

GET /api/users HTTP/1.1
Host: api.example.com
Authorization: Bearer token123
Content-Type: application/json
User-Agent: Mozilla/5.0
Accept: application/json

{"name": "John"}

Основные Headers запроса

1. Host

Домен, к которому идет запрос. Обязателен для HTTP/1.1:

fetch('/api/users')
// Автоматически добавляется:
// Host: example.com

2. Content-Type

Тип данных в теле запроса:

// JSON
fetch('/api/users', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'John' })
})

// Form Data
fetch('/api/upload', {
  method: 'POST',
  headers: { 'Content-Type': 'multipart/form-data' },
  body: formData
})

// XML
fetch('/api/data', {
  headers: { 'Content-Type': 'application/xml' }
})

// Plain Text
fetch('/api/text', {
  headers: { 'Content-Type': 'text/plain' }
})

3. Authorization

Учетные данные для аутентификации:

// Bearer Token (JWT)
fetch('/api/profile', {
  headers: { 'Authorization': 'Bearer eyJhbGc...' }
})

// Basic Auth (username:password в base64)
fetch('/api/users', {
  headers: { 'Authorization': 'Basic ' + btoa('user:pass') }
})

// API Key
fetch('/api/data', {
  headers: { 'Authorization': 'Bearer sk-1234567890' }
})

4. 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

// Можно переопределить
fetch('/api/data', {
  headers: { 'User-Agent': 'MyApp/1.0' }
})

5. Accept

Какие типы ответа приемлет клиент:

fetch('/api/data', {
  headers: {
    'Accept': 'application/json',
    // или несколько типов
    'Accept': 'application/json, text/plain, */*'
  }
})

6. Accept-Language

Предпочитаемый язык (обычно из браузера):

// Автоматически из браузера
Accept-Language: en-US,en;q=0.9,ru;q=0.8

// Переопределить
fetch('/api/data', {
  headers: { 'Accept-Language': 'ru-RU,ru;q=0.9' }
})

7. Content-Length

Длина тела запроса (обычно устанавливается автоматически):

// Автоматически
Content-Length: 1024

8. Cache-Control

Указывает браузеру как кэшировать ответ:

fetch('/api/user', {
  headers: { 'Cache-Control': 'no-cache' }
})

9. Referer (note: typo in HTTP standard)

Источник запроса (с какой страницы пришли):

// Автоматически
Referer: https://example.com/products

// Контролируется атрибутом rel
<a href="/page" rel="noreferrer">Link</a> // Не отправляет Referer

Примеры реальных Headers

Запрос с аутентификацией

fetch('/api/profile', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer token123',
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
})

// Отправляется:
// GET /api/profile HTTP/1.1
// Host: api.example.com
// Authorization: Bearer token123
// Content-Type: application/json
// Accept: application/json
// User-Agent: Mozilla/5.0...

POST запрос с JSON

fetch('/api/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ name: 'John', email: 'john@example.com' })
})

// Отправляется:
// POST /api/users HTTP/1.1
// Host: api.example.com
// Content-Type: application/json
// Content-Length: 45
// User-Agent: Mozilla/5.0...
// Connection: keep-alive
// {"name":"John","email":"john@example.com"}

Загрузка файла

const formData = new FormData()
formData.append('file', fileInput.files[0])
formData.append('name', 'My File')

fetch('/api/upload', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer token123'
    // Content-Type: multipart/form-data автоматически
  },
  body: formData
})

Headers ответа сервера

Сервер также отправляет Headers в ответе:

fetch('/api/data')
  .then(response => {
    console.log(response.headers.get('Content-Type'))
    // application/json
    console.log(response.headers.get('Set-Cookie'))
    // session=abc123
    console.log(response.headers.get('Cache-Control'))
    // max-age=3600
    return response.json()
  })

Частые Headers ответа:

Content-Type: application/json
Set-Cookie: session=abc123; Path=/; HttpOnly
Cache-Control: max-age=3600
ETag: "abc123"
X-Total-Count: 1000
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE

Custom Headers

Можно создавать свои Headers для API:

fetch('/api/data', {
  headers: {
    'X-API-Key': 'my-secret-key',
    'X-Request-ID': generateUUID(),
    'X-Custom-Header': 'custom-value'
  }
})

// На сервере можно проверить
if (!req.headers['x-api-key']) {
  return 401
}

CORS Headers

Для кросс-доменных запросов используются CORS Headers:

// Браузер автоматически добавляет
fetch('https://api.other-domain.com/data')
// Отправляется:
// Origin: https://example.com

// Сервер должен вернуть
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization

Инспекция Headers в браузере

В DevTools (F12) -> Network tab:

1. Откроешь Network
2. Выполнишь запрос
3. Кликнешь на запрос
4. Увидишь Headers
   - Request Headers: заголовки запроса
   - Response Headers: заголовки ответа

Вывод

Headers - это важная часть HTTP протокола. Они передают:

  • Аутентификацию - Authorization: Bearer token
  • Метаинформацию - Content-Type, Accept
  • Управление кэшем - Cache-Control
  • Безопасность - CORS, X-API-Key
  • Информацию о браузере - User-Agent

Понимание Headers необходимо для работы с API и решения проблем с запросами.