HTTP/2

読み:えいちてぃーてぃーぴーつー / 英語表記:HTTP/2

HTTPのバージョン2。1つのTCPコネクションの中に、ストリームという仮想的な通信の単位を複数作り、複数のリクエストとレスポンスを並列にやり取りできるようにした(多重化)。

イマシルちゃんの解説

HTTP/1.1では、1本の電話回線で、「1つ質問して、答えを聞いてから、次の質問をする」っていう話し方しかできなかったんだ。
たくさん聞きたいことがあると、電話を何本もかけるしかなかったんだよ。

HTTP/2では、1本の電話の中で、いくつもの話を同時に進められるようになったんだ。
話ごとに番号を付けて区別するから、答えが混ざっちゃう心配もないんだよ!

より深い解説

定義

HTTP/2は、RFC 9113(元はRFC 7540、2015年)で定められたHTTPのバージョンである。HTTP/1.1の意味(メソッド、ステータスコード、ヘッダーなど)はそのままに、通信の方式を大きく変えて、Webページの表示を高速化した。通常はTLSの上で使う。

主な特徴

特徴内容
バイナリ形式テキストではなく、フレームと呼ぶバイナリの単位でやり取りする
ストリームによる多重化1つのTCPコネクションの中に複数のストリームを作り、それぞれにストリームIDを付けて区別する。リクエストとレスポンスを並列に、順番を問わずにやり取りできる
ヘッダーの圧縮(HPACK)何度も送られる同じヘッダーを、表を使って短く表す
優先度ストリームに優先度を付けられる
サーバプッシュクライアントが要求する前に、サーバが必要になりそうなデータを送る(現在はほとんど使われていない)

HTTP/1.1との比較

HTTP/1.1HTTP/2
1つのTCPコネクションでの処理リクエストとレスポンスを1組ずつ順番に複数のストリームで並列に
並列にダウンロードする方法複数のTCPコネクションを張る1つのTCPコネクションで足りる
HTTPレイヤーのHoLブロッキング起きる起きない
TCPレイヤーのHoLブロッキング起きる起きる

TCPのHoLブロッキングが残る理由

HTTP/2のストリームは、すべて1つのTCPコネクションの上を流れる。TCPは、パケットが1つ失われると、それより後ろのデータを、再送が届くまでアプリケーションに渡さない。そのため、あるストリームのパケットが失われると、関係のないほかのストリームまで止まってしまう。パケット損失の多い回線では、HTTP/1.1で複数のコネクションを使うより遅くなることもある。この問題を解決するため、HTTP/3では、TCPの代わりにUDPの上で動くQUICを使う。

NAPTへの影響

HTTP/1.1では、並列にダウンロードするために、1台のPCが同じサーバに複数のTCPコネクションを張るため、NAPTの変換エントリーを多く使う。HTTP/2では、1つのTCPコネクションで済むため、変換エントリーの数を減らせる。

実際の試験ではここに出る!

この用語が出てくる記事

↑