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 を使う。

関連

出典