入力すると https://http2.golang.org/ chromeブラウザは自動的にHTTP/2リクエストを送信します。これはどのように行われますか?
たとえば、stackoverflowを例にとると、ブラウザがstackoverflow.com
にリクエストを送信するとき、次の手順を実行する必要があります。
Step3 TLSハンドシェイクに関しては、@ Olegによる 良い説明 があります。
TCP/IPパケットの詳細を検査するには、いくつかのツールを使用してパケットをキャプチャする必要がある場合があります。例えば Wireshark 。
ClientHello
をサーバーに送信し、サーバーはいくつかのことを実行しますSeverHello
を応答します。HTTP/2
HTTP2要求/応答はステップ4で発生します。その前に、ブラウザはサーバーがTLSハンドシェイクを介してHTTP/2をサポートするかどうかをすでに知っています。
chromeブラウザは、WebサイトにHTTP/1.1リクエストのみを送信します。WebサイトはHTTP/2対応なので、HTTP/2をサポートしていることを示すメッセージをブラウザに送信します。サーバーブラウザがHTTP/2を認識できる場合、サーバーとサーバーの間の通信プロトコルをHTTP/2にアップグレードします。したがって、通常、要求をHTTP/2接続に変換するのはサーバーです。ブラウザはアップグレードに準拠しています。サーバーのポリシーchromeブラウザは、サーバーが通信プロトコルをアップグレードした後でのみ、サーバーまたはWebサイトとのHTTP/2接続があることを表示します。
文字列「h2」は、HTTP/2がトランスポート層>セキュリティ(TLS)[TLS12]を使用するプロトコルを識別します。この識別子は、TLSアプリケーション層プロトコルネゴシエーション(ALPN)>拡張子[TLS-ALPN]フィールド、およびHTTP/2 over TLSが識別される場所で使用されます。
サーバーがhttp2.0をサポートしている場合、ブラウザはサーバーがTLSアプリケーション層プロトコルネゴシエーションでhttp2.0をサポートしていることを検出します。 リンクを参照 !