Какие основные типы HTTP-заголовков (headers) вы знаете?

«Какие основные типы HTTP-заголовков (headers) вы знаете?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP-заголовки классифицируются по их назначению в запросе или ответе. С точки зрения DevOps важно понимать их для настройки веб-серверов, балансировщиков нагрузки (Nginx, HAProxy) и отладки.

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

  1. General Headers (Общие заголовки): Присутствуют как в запросах, так и в ответах.

    • Cache-Control: Управляет кешированием (max-age=3600, no-cache).
    • Connection: Управляет сетевым соединением (keep-alive, close).
  2. Request Headers (Заголовки запроса): Содержат информацию о клиенте и запросе.

    • Host: Целевой хост (обязателен в HTTP/1.1).
    • User-Agent: Идентификатор клиентского ПО.
    • Authorization: Учетные данные для аутентификации (Bearer <token>, Basic <credentials>).
    • Accept: Предпочитаемые типы контента (application/json).
  3. Response Headers (Заголовки ответа): Содержат информацию о сервере и ответе.

    • Server: Информация о серверном ПО.
    • Set-Cookie: Устанавливает куки на стороне клиента.
    • Location: Используется для перенаправлений (код 3xx).
  4. Representation Headers (Заголовки представления, ранее Entity Headers): Описывают формат и свойства тела сообщения.

    • Content-Type: MIME-тип тела (text/html; charset=utf-8).
    • Content-Length: Размер тела в байтах.
    • Content-Encoding: Способ сжатия (gzip, br).

DevOps-контекст: Мы часто настраиваем заголовки в Nginx для безопасности и производительности:

location / {
    # Добавляем заголовки безопасности
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Content-Security-Policy "default-src 'self';" always;

    # Проксируем запрос с передачей заголовков
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://backend;
}

Инструменты вроде curl -I или браузерные DevTools используются для инспекции заголовков при отладке.