Что такое HTTP-заголовки? Приведите примеры основных типов.

Ответ

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

Заголовки можно разделить на несколько основных групп:

  1. Request Headers (Заголовки запроса) — отправляются клиентом серверу.

    • Host: Доменное имя сервера, к которому направлен запрос.
    • User-Agent: Информация о клиенте (например, браузер, curl).
    • Accept: Типы контента, которые клиент может принять в ответе (например, application/json).
    • Authorization: Данные для аутентификации (например, Bearer <token>).
    • Content-Type: MIME-тип тела запроса (для POST, PUT).
  2. Response Headers (Заголовки ответа) — отправляются сервером клиенту.

    • Content-Type: MIME-тип тела ответа.
    • Content-Length: Размер тела ответа в байтах.
    • Set-Cookie: Установка cookie на стороне клиента.
    • Cache-Control: Инструкции по кэшированию ответа.
    • Location: Используется для перенаправления (редиректа) на другой URL.
  3. General Headers (Общие заголовки) — могут присутствовать как в запросах, так и в ответах.

    • Date: Дата и время формирования сообщения.
    • Connection: Управляет текущим соединением (например, keep-alive).

Пример создания запроса с заголовками в Go:

// Создаем новый GET-запрос
req, _ := http.NewRequest("GET", "https://api.example.com/items", nil)

// Добавляем заголовки
req.Header.Add("Authorization", "Bearer mysecrettoken")
req.Header.Add("Accept", "application/json")

// Отправляем запрос
client := &http.Client{}
resp, err := client.Do(req)