Для чего нужен таймаут в HTTP-запросе

«Для чего нужен таймаут в HTTP-запросе» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Таймаут в HTTP-запросе ограничивает время ожидания ответа от сервера, предотвращая зависание клиента при проблемах с сетью или сервером. В Go можно задать таймаут через context или http.Client:

client := &http.Client{
    Timeout: 5 * time.Second, // Общий таймаут на весь запрос
}

// Или с контекстом
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()

req, _ := http.NewRequestWithContext(ctx, "GET", "https://example.com", nil)
resp, err := client.Do(req)

Основные сценарии:

  • Таймаут соединения – если сервер долго не отвечает на установку соединения.
  • Таймаут чтения/записи – если передача данных затягивается.
  • Deadline – общее ограничение времени на весь запрос.