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

Зачем нужен заголовок в HTTP?

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

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

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

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

Зачем нужны заголовки в HTTP

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

Структура HTTP сообщения

GET /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer token123
Accept-Encoding: gzip, deflate

[Тело сообщения]

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

1. Заголовки содержимого (Content Headers)

Content-Type — тип содержимого ответа/запроса

Content-Type: application/json; charset=utf-8
Content-Type: text/html; charset=utf-8
Content-Type: application/x-www-form-urlencoded
Content-Type: multipart/form-data

Content-Length — размер тела в байтах

Content-Length: 1234

Content-Encoding — метод сжатия

Content-Encoding: gzip
Content-Encoding: deflate

2. Заголовки кеширования (Caching Headers)

Критичны для производительности:

// Ответ сервера
Cache-Control: max-age=3600        // Кешировать 1 час
Cache-Control: no-cache            // Всегда валидировать
Cache-Control: no-store            // Не кешировать вообще
Cache-Control: public              // Любой кеш
Cache-Control: private             // Только браузер

ETag — уникальный идентификатор версии

ETag: "33a64df5425b"

Last-Modified — дата последнего изменения

Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT

3. Заголовки безопасности (Security Headers)

Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=31536000
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

4. Заголовки аутентификации и авторизации

// Запрос
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Authorization: Bearer oauth2_token

// Ответ
WWW-Authenticate: Bearer realm="api"

5. CORS заголовки (Cross-Origin Resource Sharing)

// Запрос
Origin: https://example.com
Access-Control-Request-Method: POST

// Ответ
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 3600

Практические примеры

Пример 1: Запрос с JSON

const response = await fetch('https://api.example.com/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',          // Я отправляю JSON
    'Authorization': 'Bearer token123',          // Аутентификация
    'Accept': 'application/json',                // Я принимаю JSON
  },
  body: JSON.stringify({ name: 'John' })
});

Пример 2: Кеширование API ответов

// Сервер отправляет
HTTP/1.1 200 OK
Cache-Control: max-age=300        // Кеш на 5 минут
ETag: "abc123"

// Браузер на следующий запрос отправляет
If-None-Match: "abc123"

// Сервер отвечает
HTTP/1.1 304 Not Modified         // Используй кеш!

Пример 3: Безопасность файлов

// Скачивание PDF
Content-Type: application/pdf
Content-Disposition: attachment; filename="document.pdf"
Content-Length: 102400

Заголовки в Node.js/Express

app.get('/api/users', (req, res) => {
  console.log(req.headers.authorization);  // Читаем заголовки
  
  res.set({
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/json',
    'X-Custom-Header': 'value'
  });
  
  res.json({ users: [] });
});

Заголовки в браузере (fetch API)

// Читаем заголовки ответа
const response = await fetch('/api/data');
const contentType = response.headers.get('Content-Type');
const cacheControl = response.headers.get('Cache-Control');

// Перебор всех заголовков
for (const [key, value] of response.headers) {
  console.log(`${key}: ${value}`);
}

Почему заголовки критичны

1. Производительность

  • Cache-Control экономит трафик и ускоряет загрузку
  • Gzip сжатие уменьшает размер ответа

2. Безопасность

  • CORS предотвращает неавторизованный доступ
  • CSP защищает от XSS атак
  • HSTS заставляет использовать HTTPS

3. Совместимость

  • Content-Type говорит браузеру как интерпретировать данные
  • Accept-Encoding указывает доступные алгоритмы сжатия

4. Аутентификация

  • Authorization передаёт токены доступа
  • Гарантирует идентификацию пользователя

Инструменты для проверки заголовков

  • DevTools Network — вкладка Headers
  • curl с флагом -i — показывает заголовки
  • curl -v — подробный вывод
  • Postman — визуальный редактор

Заголовки — это скелет HTTP. Без них невозможна доставка данных, безопасность, кеширование и множество других функций современного веба.