> Что такое протокол HTTP и как он работает (Go)
Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
Короткий ответ
HTTP - это текстовый протокол прикладного уровня для обмена данными между клиентом и сервером по модели запрос-ответ. Клиент отправляет запрос с методом, URL, заголовками и телом, сервер возвращает ответ со статус-кодом, заголовками и телом. Протокол работает поверх TCP, а в Go реализован в пакете net/http.
Подробное объяснение
HTTP расшифровывается как HyperText Transfer Protocol. Он описывает формат сообщений и правила их передачи, но не управляет транспортом: обычно используется TCP, а в HTTP/3 - QUIC поверх UDP. Каждый запрос содержит метод (GET, POST, PUT, DELETE и другие), путь, версию протокола, заголовки и опциональное тело. Ответ содержит версию, статус-код (200, 404, 500), заголовки и тело.
HTTP является stateless-протоколом: сервер не хранит состояние между запросами по умолчанию. Состояние добавляют через cookies, токены или сессии. Версии протокола различаются: HTTP/1.1 держит одно соединение для нескольких запросов, HTTP/2 мультиплексирует потоки в одном TCP-соединении, HTTP/3 использует QUIC.
В Go сервер строится на http.Server и http.Handler. Клиент использует http.Client. Пакет net/http сам управляет парсингом запросов, заголовками, keep-alive и таймаутами, если их настроить.
На практике
В backend на Go HTTP - основной способ предоставить API. Типичный сервер регистрирует обработчики через http.HandleFunc или http.NewServeMux, читает тело через r.Body, пишет ответ через w.Write или json.NewEncoder(w).Encode. Важно закрывать тело запроса и ответа, задавать Content-Type, обрабатывать ошибки и не забывать про таймауты, чтобы избежать утечек соединений.
Пример кода
GOpackage mainimport ("encoding/json""log""net/http")type response struct {Message string `json:"message"`}func helloHandler(w http.ResponseWriter, r *http.Request) {if r.Method != http.MethodGet {http.Error(w, "method not allowed", http.StatusMethodNotAllowed)return}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(response{Message: "hello"})}func main() {mux := http.NewServeMux()mux.HandleFunc("/hello", helloHandler)srv := &http.Server{Addr: ":8080",Handler: mux,}log.Fatal(srv.ListenAndServe())}
Как отвечать на собеседовании
Скажите, что HTTP - это протокол прикладного уровня по модели запрос-ответ. Упомяните структуру запроса и ответа, методы, статус-коды, заголовки и тело. Отметьте, что протокол stateless и работает поверх TCP, а в Go реализован в net/http. Кратко сравните HTTP/1.1, HTTP/2 и HTTP/3.
Что проверяет интервьюер
Понимание базовой модели клиент-сервер и формата сообщений. Знание методов, статус-кодов и заголовков. Понимание stateless-природы и способов хранить состояние. Умение работать с net/http в Go: обработчики, клиент, таймауты, закрытие тел.
Типичные ошибки
Путать HTTP с TCP и говорить, что HTTP устанавливает соединение. Считать протокол stateful по умолчанию. Забывать закрывать r.Body и resp.Body. Не задавать таймауты у http.Server и http.Client. Игнорировать разницу версий протокола и особенности мультиплексирования.
> Похожие задачи по Go
Как определить, что запрос в базе тормозит
Что означает ошибка 400 в HTTP?
Как транзакции обеспечивают консистентность данных
Почему куча медленнее стека
> Похожие задачи по backend
Как определить, что запрос в базе тормозит
Что означает ошибка 400 в HTTP?
Как транзакции обеспечивают консистентность данных
Почему куча медленнее стека
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью