> В чем различия между 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. Пример простого сервера:

GO
package main
import (
"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 нужно включить TLS
err := http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
if err != nil {
panic(err)
}
}

Без TLS HTTP/2 не работает (за исключением h2c, который редко используется). Для клиента в Go HTTP/2 также поддерживается автоматически при использовании http.Client с TLS.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью