Страницы

Поиск по вопросам

четверг, 13 декабря 2018 г.

Как браузер дает знать серверу, что он поддерживает HTTP/2?

Когда юзер заходит на сайт, браузер ведь не знает, поддерживает ли сайт http/2. Так же как и сервер не знает про возможности браузера. Как они договариваются между собой о поддержке http/2?


Ответ

Для выбора между HTTPS и HTTP/2+TLS — по ALPN (RFC).
Поскольку HTTPS и HTTP/2 оба могут работать по TLS 1.2 и выше, было создано расширение для TLS, ALPN, с помощью которого клиент и сервер могут договориться о доступных протоколах ещё на этапе TLS-"приветствия" (handshake). Протокол HTTP/2 идентифицируется в нём токеном h2, это разновидность HTTP/2, работающая поверх TLS, с шифрованием.
"Крупные браузеры" заявили, что будут поддерживать только HTTP/2 по TLS (1, 2), поэтому других способов на практике можно запросто не встретить.

Для HTTP/2 по "голому" TCP-соединению (поддержка которого так себе, см. выше) используется обычный механизм по заголовку Upgrade, тот же что и для Websocket, в котором:
клиент
должен совершить первый полный запрос, заявив о возможности обновить протокол до h2c (HTTP/2 через голый TCP) заголовком Upgrade и приложив ровно один заголовок HTTP2-Settings с base64-закодированными настройками протокола сервер, готовый это сделать:
должен ответить 101 Switching Protocols завершив этот ответ, начать отдавать ответ на исходный запрос уже по HTTP/2, не дожидаясь подтверждения от клиента сервер, не готовый это сделать:
может проигнорировать намерения клиента

Комментариев нет:

Отправить комментарий