Если я напечатаю https://http2.golang.org/, браузер Chrome автоматически отправит запрос HTTP/2. Как это делается?
Как браузер знает, поддерживает ли сайт HTTP/2?
Ответ 1
Возьмем, например, stackoverflow, когда браузер отправляет запрос на stackoverflow.com
, он должен выполнить следующие шаги:
- Поиск DNS. найти IP-адрес stackoverflow.
- TCP/IP рукопожатие
- TLS рукопожатие.
- HTTP запрос/ответ (протокол приложения).
- ...
TLS рукопожатие
Относительно рукопожатия TLS Step3 @Oleg есть хорошее объяснение.
Для проверки деталей пакета TCP/IP вам может понадобиться использовать некоторые инструменты для захвата пакетов. например, Wireshark.
Клиент отправляет ClientHello
на сервер, который несет несколько вещей
- поддерживаемый набор шифров. какие комплекты шифров вам нравятся?
- поддерживаемая версия TLS.
- случайное число.
- поддерживаемые протоколы приложений. например HTTP/2, HTTP 1.1/Spdy/..
- ...
Сервер отвечает SeverHello
, который несет
- выбранный набор шифров.
- выбранная версия TLS.
- случайное число
- И, выбранные прикладные протоколы в согласовании протоколов прикладного уровня TLS (ALPN), например
HTTP/2
Заключение
HTTP2 запрос/ответ происходит в шаге 4. До этого браузер уже знал, поддерживает ли сервер HTTP/2 через рукопожатие TLS.
Ответ 2
Браузер Chrome отправит HTTP/1.1 запрос на веб-сайт. Поскольку сайт HTTP/2 Enabled, он отправит браузеру сообщение, что он поддерживает HTTP/2. Сервер обновляет протокол связи между ним и сервером до HTTP/2, если находит браузер, способный распознавать HTTP/2. Таким образом, это, как правило, сервер, который преобразует запрос в HTTP/2 Connection. Браузер просто соответствует политике обновления сервера. Браузер Chrome показывает, что у вас есть соединение HTTP/2 с сервером или веб-сайтом, только после того, как сервер обновит протокол связи.
Ответ 3
Строка "h2" идентифицирует протокол, в котором HTTP/2 использует Transport Layer > Security (TLS) [TLS12]. Этот идентификатор используется в поле TCP-ALPN для согласования протокола уровня приложения (ALPN) > extension [TLS-ALPN] и в любом месте, где идентифицируется HTTP/2 через TLS.
Если сервер поддержки HTTP2.0 браузер найдет, что сервер поддерживает http2.0 в протоколе протокола уровня TLS. ссылка на ссылку!
Ответ 4
Сам сайт использует библиотеку Go 1.6. https://godoc.org/golang.org/x/net/http2
Но возможны и другие способы.
Вы должны проверить:
http://www.w3schools.com/default.asp
для некоторых основных уроков, а затем попробуйте и узнайте что-нибудь об заголовках API и т.д., если вы заинтересованы в этом.