Немного поизучав тему, я выяснил, что:
• В самой Java протокол HTTP/3 поддерживается только в качестве клиента и только начиная с версии 26, вышедшей в марте этого года (JEP-517).
• Для поддержки на стороне сервера нужны сторонние библиотеки, в нашем случае это Apache Tomcat, так как API для фронта крутится на нём.
◦ При этом от Java как от платформы требуется реализация DTLS, но она, к счастью, сделана ещё в Java 9.
• А вот Tomcat поддержки HTTP/3 не имеет и не сильно торопится её вводить, потому что:
◦ HTTP/3 построен поверх протокола UDP и сильно оптимизирован для работы в мобильных сетях и прочих нестабильных условиях;
◦ Но Tomcat редко взаимодействует с ними напрямую, т.к. чаще всего стоит за балансировщиком, реверс-прокси, side-car'ом или чем-то ещё внутри корпоративного контура, где соединения уже стабильны, быстры и предсказуемы;
◦ Поэтому разработчики Tomcat считают старый добрый HTTP/1.1 (поверх TCP) всё ещё более подходящим:
Tomcat is not normally directly internet facing. It is typically sat behind some form of load-balancer and/or TLS termination and/or reverse proxy. In those scenarios poor network conditions aren't an issue so using QUIC is costs CPU power which is something folks - particularly those with large installations - try to minimise. It makes more sense to use HTTP/1.1 in those scenarios.
Hence there isn't much requirement for an HTTP/3 implementation in Tomcat at the moment.
◦ В этой связи, авторы Tomcat предлагают страждущим поддержки HTTP/3 ставить перед Tomcat'ом NGINX и снимать HTTP/3 на нём (либо на Caddy, Envoy и др.)
• Но если стоит задача эффективно и быстро упаковывать данные для передачи и приёма именно по WebTransport API, то в этом сценарии бэкендовый сервер всё равно рискует остаться узким местом 🍾
Тогда остаются такие варианты:
• Ждать поддержки HTTP/3 в Tomcat (рано или поздно она, скорее всего, будет);
• Менять Tomcat на другой сервлет-контейнер, например, Jetty, который уже поддержал HTTP/3;
• Переходить с сервлетного стека на реактивный, в котором Reactor Netty тоже поддерживает HTTP/3 ☢️
Есть ли другие альтернативы — не знаю, но не исключаю, что появятся, ведь и сам WebTransport API ещё только в baseline и потому поддерживается не повсеместно. Поживём-увидим 👀