HTTP/2とは
HTTP/2は、一つのTCP接続で複数の要求を並行処理し、ヘッダー圧縮などを行うHTTPの版です。HTTP/2(Hypertext Transfer Protocol Version 2/ハイパーテキスト・トランスファー・プロトコル・バージョン・ツー)で、エイチティーティーピー・ツーと読みます。
HTTPのメソッド、URI、状態コード、フィールドの意味は保ったまま、メッセージを小さなバイナリーフレームへ分けます。各要求・応答をストリームへ割り当て、複数ストリームのフレームを一つの接続へ交互に流します。
HTTP/2の多重化は「複数のTCP接続を同時に作る」ことではなく、一つのTCPバイト列の中で、ストリーム番号付きフレームを交互に運ぶ仕組みです。

接続、ストリーム、メッセージ、フレームを階層として読む
設定、圧縮表、接続フロー制御を共有し、双方向でフレームを運ぶ
番号で識別し、通常一つの要求と対応する応答を双方向に構成する
メソッド、対象、状態、通常フィールドをHPACK形式で符号化する
要求本文や応答本文を、ストリームのDATAフレームとして運ぶ
SETTINGS、PING、GOAWAYなどが能力、疎通、終了範囲を伝える
DATAに対し、接続全体と各ストリームの二段階で空き容量を通知する
バイナリーフレームにより、複数交換を曖昧なく多重化する
HTTP/1.1は開始行とフィールドをテキストとして送り、本文長やチャンクでメッセージ境界を定めます。HTTP/2は長さ、種類、フラグ、ストリーム識別子を持つ固定形式のフレームヘッダーで区切ります。「バイナリーだから内容が暗号化される」という意味ではありません。
クライアントが開始する通常ストリームには規則に沿う番号を割り当て、応答フレームは同じストリームへ返ります。あるストリームをRST_STREAMで止めても、接続と他ストリームは継続できます。接続全体を穏やかに終えるGOAWAYは、処理済み範囲を伝えて再試行判断を助けます。
HPACKは、同じヘッダーを表へ登録して短い参照へ置き換える
HPACK(エイチパック)はHTTP/2のヘッダー圧縮方式です。よく使う名前・値の静的表と、接続中に双方が更新する動的表を使い、CookieやUser-Agentなど繰り返す文字列を短い索引として送れます。
送信側と受信側の動的表が同じ順に更新される必要があるため、ヘッダーブロックの復号には接続上の先行情報が関わります。圧縮後サイズ、表サイズ、展開後フィールド量へ上限を設け、メモリー消費や過大なヘッダーを制限します。
フロー制御は受信側を守り、優先度は送信順の希望を伝える
HTTP/2のフロー制御はDATAフレームへ適用され、受信側がWINDOW_UPDATEで追加受信可能量を通知します。ストリームの窓が空いていても接続全体の窓が尽きれば送れず、その逆も同様です。TCPの受信ウィンドウとはさらに別の層です。
優先度は重要な資源を先に送りたい希望ですが、初期の依存木方式は運用上複雑で、RFC 9113では該当機構が非推奨になりました。実装やCDNが常に希望どおり配分する保証はなく、資源設計や測定も必要です。
TCPの順序保証により、一つの欠落が接続全体のフレーム解析を止める
HTTP/2ではストリームが論理的に独立していても、すべてのフレームは一つのTCPバイト列に並びます。途中のTCPセグメントが失われると、後続セグメントが届いていても、TCPが欠落を回復して順序を整えるまでアプリへ渡せません。
これがHTTP/2に残る、トランスポート層の先頭待ちによる停滞です。アプリケーション層で多重化できることと、トランスポート層で各ストリームが独立して損失から回復できることは別です。後者を改善するため、HTTP/3はQUICを使います。
WebのHTTP/2は通常TLS上で、ALPNによりh2を選ぶ
HTTPS接続では、TLSハンドシェイクのALPNでクライアントとサーバーがh2を合意します。証明書とTLS設定はHTTPSとして検証し、合意できなければHTTP/1.1など別の対応方式になることがあります。
平文TCP上のHTTP/2も仕様上ありますが、Webブラウザーでの一般的な利用はHTTPSです。開発者ツールの「h2」表示は転送版を示し、URL、HTTPメソッド、キャッシュ意味論が別物へ変わったわけではありません。
仕様の確認資料:RFC 9113「HTTP/2」、RFC 7541「HPACK」、RFC 7301「TLS ALPN Extension」