Какие протоколы используются для взаимодействия браузера с сервером
Что проверяют
Понимаете ли вы, что стоит за fetch и загрузкой страницы, и умеете ли выбрать транспорт под задачу. Следом обычно спрашивают, как HTTP/2 изменил привычные оптимизации или что взять для чата: WebSocket или SSE.
Как отвечать
Начните с HTTP и его версий, затем перейдите к протоколам для реального времени:
- HTTP/1.1: запрос-ответ поверх TCP. Браузер открывает до шести соединений на хост, поэтому раньше склеивали всё в один бандл, собирали спрайты и раскладывали статику по поддоменам;
- HTTP/2: мультиплексирование запросов в одном соединении и сжатие заголовков. Шардинг доменов стал вредным, мелкие файлы больше не так дороги. Браузеры используют HTTP/2 только поверх TLS;
- HTTP/3: работает поверх QUIC на UDP, быстрее устанавливает соединение и лучше переживает потерю пакетов и смену сети на телефоне. Сервер объявляет его заголовком
Alt-Svc; - TLS: основа HTTPS. Вне безопасного контекста не работают Service Worker, геолокация и многие новые API;
- WebSocket: постоянный двусторонний канал через
UpgradeHTTP-запроса, для чатов, совместного редактирования, игр; - SSE:
EventSource, поток событий только от сервера с автоматическим переподключением. Для уведомлений и стриминга ответа часто проще WebSocket; - WebRTC: соединение между браузерами, по возможности напрямую, для звука, видео и данных.
Покажите, что проверяете это руками: в DevTools на вкладке Network колонка Protocol показывает http/1.1, h2 или h3, а у WebSocket-соединения есть вкладка с сообщениями.
Где спотыкаются
Называют gRPC протоколом браузера. Напрямую браузер его не вызывает, нужен gRPC-Web через прокси или протокол Connect.
Считают HTTPS отдельным протоколом, а не HTTP поверх TLS, и не могут объяснить, что шифруется. Шифруется весь запрос, включая путь, параметры и заголовки, а открытыми обычно остаются только IP-адрес и имя домена в SNI.
Берут WebSocket для любой «живой» задачи. Для односторонних уведомлений хватает SSE: он проще проходит через прокси, работает по обычному HTTP и переподключается сам.