Bun получил HTTP/2: что проверить у API и WebSocket
В Bun 1.4.1 появилась поддержка HTTP/2 в Bun.serve, но это не делает любой API, WebSocket или gRPC-сервис совместимым с новым режимом. Проверять нужно каждый участок соединения: клиент с прокси и прокси с приложением могут использовать разные протоколы. Надпись h2 в браузере отвечает только на часть вопроса.
Что объявил Bun и что ограничивает документация
Выпуск Bun 1.4.1 от 4 сентября 2026 года добавил HTTP/2 на том же порту и с теми же routes и fetch-обработчиком, что у HTTP/1.1. Общий обработчик удобен для кода приложения, но не отменяет различия в возможностях транспорта.
Документация Bun.serve помечает поддержку HTTP/2 как экспериментальную. В ней отдельно указано отсутствие WebSocket поверх HTTP/2, server push и response trailers, необходимых gRPC. Поэтому фразу «поддерживается HTTP/2» нельзя сокращать до «подходит любой сценарий на HTTP/2».
Карта соединений вместо одной отметки в браузере
Начните с рисунка маршрута конкретного запроса. Где завершается TLS? Кто устанавливает соединение с приложением? Через какой узел идут долгие подключения? Ответы нужны для каждого сервиса, а не для сайта вообще. Следующая таблица — наша схема разбора, не результат нагрузочного тестирования Bun.
| Участок или сценарий | Что фиксировать отдельно | Приёмочное наблюдение | Недостаточное доказательство |
|---|---|---|---|
| Браузер → внешний прокси | Согласованный протокол и узел завершения TLS | Фактический запрос к нужному адресу | h2 у другой страницы того же домена |
| Прокси → Bun | Протокол upstream-соединения | Данные разрешённой диагностики на этом участке | Только протокол, который видит браузер |
| Обычный API | Метод, тело, статус и заголовки ответа | Совпадение ожидаемого результата по обоим маршрутам | Главная страница открывается |
| Долгое WebSocket-соединение | Как обеспечивается совместимый путь HTTP/1.1 | Подключение и получение прикладного сообщения | Разовый HTTP-запрос завершился успешно |
| Сервис с trailers | Какие завершающие метаданные требуются | Подтверждённая поддержка всего используемого стека | Сам факт наличия HTTP/2 в сервере |
Почему отключать HTTP/1.1 вслепую опасно для чата
В текущем описании Bun server.upgrade работает только с запросами HTTP/1.1. Если приложение одновременно отдаёт API и обслуживает чат, решение отказаться от HTTP/1.1 должно учитывать этот отдельный путь. Успех обычного запроса не подтверждает установление постоянного соединения.
В учебной схеме клиент обращается к прокси, а прокси передаёт запросы приложению. Проверяющий видит HTTP/2 снаружи и решает отключить HTTP/1.1 на сервере. Но внешний протокол не говорит, как настроен upstream и куда попадает WebSocket. Это условный пример; он не описывает конкретную инфраструктуру читателя.
Одинаковый обработчик не гарантирует одинаковую эксплуатацию
В тесте API сравнивайте прикладной результат: переданные данные, полученный статус, обработку отказа и запись результата. Отдельно проверьте длинный ответ и прекращение соединения клиентом, если это действительно используется. Цель — увидеть отличия вашего маршрута, а не собрать произвольный набор сетевых проверок.
Не обещайте владельцу сервиса ускорение только из-за смены протокола. Время ответа может определяться обращением к базе или внешней системе. Чтобы обсуждать выигрыш, заранее выберите пользовательскую операцию, одинаковые условия сравнения и показатель. Опубликованные производителем измерения другой нагрузки не становятся измерениями вашего API.
Как принять решение по существующему проекту
- Запишите необходимые сценарии: обычные запросы, потоки, WebSocket, другие используемые протоколы.
- Для каждого нарисуйте фактическую цепочку соединений.
- Сверьте ограничения текущей документации с требованиями сценария.
- Оставьте совместимый путь для возможностей, которые новый режим не обслуживает.
- Проверьте прикладной результат на отдельной среде.
- Согласуйте условия включения и возврата настройки без потери данных.
Если нужная функция отсутствует, это основание сохранить подходящий транспорт или другой компонент, а не имитировать успешный тест. Перед изменением рабочей среды заново проверьте документацию и актуальные исправления. Исторический номер 1.4.1 не означает, что сегодня следует ставить именно этот выпуск.
В проекте API-интеграции описывайте транспортные требования рядом с контрактом данных. При сопровождении серверов сохраняйте карту прокси, а при разработке веб-приложения включайте долгие соединения в приёмочные сценарии. В статье соединения с рабочими системами не менялись и сравнительные замеры не проводились.
Вопросы и ответы
Поддерживает ли Bun HTTP/2 без ограничений?
В документации Bun.serve эта возможность обозначена как экспериментальная. Там же перечислены неподдерживаемые сценарии, поэтому совместимость оценивают по требованиям приложения.
Можно ли использовать Bun.serve HTTP/2 для WebSocket?
Текущий server.upgrade работает с HTTP/1.1, а WebSocket поверх HTTP/2 не поддерживается. Для такого приложения нужно отдельно сохранить и проверить совместимый путь соединения.
Bun HTTP/2 server автоматически подходит для gRPC?
Нет: поддержка HTTP/2 сама по себе не подтверждает весь необходимый набор возможностей. В документации отдельно отмечено отсутствие response trailers, нужных gRPC.
Читайте также
Go: октябрьские исправления HTTP/2 и проверка готовой сборки
КомментарииValkey о FakeValkey: что зелёные тесты без сервера не проверят
КомментарииЯндекс Маркет добавил API документов: что проверить в обмене
SaaSОдин билет на двух входах: что ограничивает офлайн-проверку
БезопасностьAPI-ключ во фронтенде: что можно открыть, а что переносить
НовостиКомпенсация половины НДС за эквайринг: как получить и проверить