> В чем различия между HTTP/1.1 и HTTP/2 (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Wildberries, VK, Русклимат, Avito
Стек: Go
> Пример ответа
Основное различие между HTTP/1.1 и HTTP/2 - это переход от текстового, последовательного протокола к бинарному, мультиплексированному. В HTTP/1.1 каждый запрос требует отдельного TCP-соединения (или конвейерной обработки, которая часто приводит к блокировке HOL - head-of-line blocking). HTTP/2 решает эту проблему, позволяя отправлять несколько потоков данных по одному соединению одновременно (мультиплексирование), что значительно снижает задержки.
Ключевые отличия:
-
Бинарный формат: HTTP/2 использует фреймы и потоки вместо текстовых сообщений, что упрощает парсинг и уменьшает ошибки.
-
Мультиплексирование: В HTTP/2 один TCP-сокет может обслуживать множество параллельных запросов, избегая блокировки HOL на уровне протокола (хотя HOL на уровне TCP остаётся).
-
Сжатие заголовков: HTTP/2 применяет HPACK для сжатия заголовков, что экономит трафик, особенно при повторяющихся запросах.
-
Server Push: Сервер может отправлять ресурсы (например, CSS/JS) до того, как клиент их запросит, что ускоряет загрузку страниц.
-
Приоритизация потоков: Клиент может указать важность запросов, чтобы сервер обрабатывал их в нужном порядке.
В Go для работы с HTTP/2 достаточно использовать стандартную библиотеку net/http - начиная с Go 1.6, она автоматически поддерживает HTTP/2 при использовании TLS. Пример простого сервера:
GOpackage mainimport ("fmt""net/http")func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Протокол: %s", r.Proto) // Выведет "HTTP/2.0" при использовании HTTP/2})// Для HTTP/2 нужно включить TLSerr := http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)if err != nil {panic(err)}}
Без TLS HTTP/2 не работает (за исключением h2c, который редко используется). Для клиента в Go HTTP/2 также поддерживается автоматически при использовании http.Client с TLS.
> Похожие задачи по backend
Зачем нужны каналы в Go и в чем разница между буферизованными и небуферизованными каналами
Расскажите про опыт работы с Go
Почему в Go можно создать тысячи горутин
Что такое нормализация и денормализация баз данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью