Ответ
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).