На какой версии HTTP работает gRPC и почему?

Ответ

gRPC работает поверх HTTP/2. Этот выбор является фундаментальным и обусловлен ключевыми возможностями HTTP/2, которые необходимы для эффективной работы gRPC:

  • Мультиплексирование (Multiplexing): HTTP/2 позволяет отправлять множество запросов и ответов одновременно через одно TCP-соединение, не блокируя друг друга. Это критически важно для высокопроизводительных микросервисных архитектур, где один клиент может одновременно общаться с множеством сервисов.

  • Двунаправленная потоковая передача (Bidirectional Streaming): gRPC активно использует стриминг (серверный, клиентский и двунаправленный). HTTP/2 предоставляет нативную поддержку потоков, что делает реализацию стриминга в gRPC естественной и эффективной.

  • Бинарный протокол (Binary Protocol): В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный фреймовый протокол. Он более компактен, эффективен и менее подвержен ошибкам при парсинге, что снижает задержки и нагрузку на сеть.

  • Сжатие заголовков (Header Compression with HPACK): Уменьшает накладные расходы за счет эффективного сжатия HTTP-заголовков, что особенно полезно при большом количестве мелких запросов.

Из-за этих требований gRPC несовместим с HTTP/1.1, который не поддерживает мультиплексирование и потоковую передачу в том виде, который нужен gRPC.

Примечание: Для работы gRPC в браузерах, где прямой контроль над HTTP/2 ограничен, используется прокси-технология gRPC-Web, которая транслирует вызовы в совместимый с браузерами формат (например, HTTP/1.1).