TL;DR
2015 年に RFC 7540 で標準化された HTTP のバージョン。1 つの TCP 接続で複数のリクエストを同時に処理する多重化や、ヘッダ圧縮を導入した。2022 年に RFC 9113 として改訂されている。
仕組み
RFC 7540 では、主に次の機能が追加された。
多重化
1 つの TCP 接続の上に、ストリームと呼ばれる仮想的な接続を複数作る。これにより、複数のリクエストとレスポンスを同時に処理できる。HTTP/1.1 で導入されたパイプライン化は、この仕組みで置き換えられた。
ヘッダ圧縮
HPACK という方式で HTTP ヘッダを圧縮し、通信量を減らす。
優先度付け
リクエストに優先度を付けられる。たとえば、ブラウザが描画に必須の HTML や CSS、ユーザが真っ先に見たいテキストや画像の優先度を高くし、それ以外を低くする。ユーザが見たいコンテンツを長く待たずに済むので、UX が向上する。
フロー制御
受信側の処理能力に合わせて、送信側が送るデータ量を調整する。TCP にもフロー制御はあるが、HTTP のレイヤで行うことで、多重化したストリームごとに独立して制御できる。
サーバプッシュ
クライアントが要求する前に、サーバが必要なリソースを送る機能。ページの読み込みが速くなると期待された。
注意点
実装が複雑でオーバーヘッドが大きく、使用率も 1% 未満だったので、Google Chrome は 2022 年にサーバプッシュのサポートを終了した。また、攻撃者がユーザの知らないうちに大量のリソースを押し付け、ブラウザや端末に負荷をかけるおそれもある。代わりに、レスポンスでリソースのヒントだけを伝えるステータスコード 103 Early Hints を使う。