0Pricing
Go Academy · Урок

Настройка тайм-аутов и заголовков

Тайм-ауты клиента, пользовательские заголовки и токены аутентификации

«Настройка тайм-аутов и заголовков» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Ограничение времени ожидания на уровне клиента

Задайте http.Client.Timeout, чтобы ограничить общее время выполнения запроса и получения ответа. Это самое простое для настройки ограничение времени ожидания.

client := &http.Client{Timeout: 10 * time.Second}

Ограничения времени ожидания на уровне транспорта

Точно настройте время установления соединения и TLS-рукопожатия с помощью http.Transport:

t := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   5 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    TLSHandshakeTimeout:   5 * time.Second,
    ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}

Ограничение времени ожидания через контекст

Ограничения времени ожидания контекста действуют для отдельных запросов и распространяются на последующие вызовы. Они отменяют запрос после истечения крайнего срока.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

Настройка заголовков запроса

Добавляйте заголовки в запрос с помощью req.Header.Set (заменяет значение) или req.Header.Add (добавляет значение):

req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)

Распространённые заголовки

Content-Type — для тела запроса; Accept — для указания желаемого формата ответа; Authorization — для токенов аутентификации; User-Agent — для идентификации клиента.

Чтение заголовков ответа

Читайте заголовки ответа с помощью resp.Header.Get(key):

contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")

Время ожидания простоя соединения

Задайте IdleConnTimeout для транспорта, чтобы закрывать простаивающие соединения и не допускать их накопления при снижении нагрузки.

t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10

Конфигурация TLS

Настраивайте TLS (минимальную версию и сертификаты клиента) через tls.Config транспорта:

t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}

Распознавание ошибок времени ожидания

Отличайте ошибки времени ожидания от сетевых ошибок с помощью errors.As:

var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
    // handle timeout
}

Ограничение времени ожидания для запроса и клиента

Client.Timeout применяется к каждому запросу. Ограничение времени ожидания контекста действует для отдельного запроса и может быть меньше времени ожидания клиента. Соблюдаются оба ограничения — действует меньшее.

Отключение постоянных соединений

Задайте DisableKeepAlives: true для транспорта в короткоживущих программах, открывающих мало соединений, чтобы избежать затрат на пул соединений.

Быстрая проверка

Если заданы и http.Client.Timeout, и время ожидания контекста, какое из них действует?

Итоги: время ожидания и заголовки

Основные положения:

  • client.Timeout: общее время ожидания для каждого запроса
  • context.WithTimeout: отменяемое время ожидания, которое передаётся дальше
  • req.Header.Set для пользовательских заголовков
  • Transport для точной настройки TLS, установления соединения и времени ожидания простоя

Часто задаваемые вопросы

Урок «Настройка тайм-аутов и заголовков» бесплатный?

Да — полный текст урока «Настройка тайм-аутов и заголовков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Настройка тайм-аутов и заголовков»?

Тайм-ауты клиента, пользовательские заголовки и токены аутентификации Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Настройка тайм-аутов и заголовков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Выполнение HTTP-запросов
  2. Настройка тайм-аутов и заголовков
  3. Декодирование ответов JSON
  4. Обработка ошибок и логика повторных попыток
← Назад к Go Academy