HTTP/2
2015 年に RFC 7540 で発表された HTTP の標準バージョン
その後、2022 年に RFC 9113 として改訂
RFC 7540 で追加された機能
マルチプレクシング(多重化)の導入
https://datatracker.ietf.org/doc/html/rfc7540/#autoid-16
1 つの TCP 接続上に ストリーム と呼ばれる仮想的な接続を複数作成することで、複数のリクエストとレスポンスを同時に処理できるようにする技術
これにより、HTTP/1.1 で導入された パイプライン化 が代替されるようになった
ヘッダ圧縮 の導入
https://datatracker.ietf.org/doc/html/rfc7540/#autoid-15
HPACK と呼ばれる手法で HTTP ヘッダ を圧縮する
これにより、通信量が削減できる
サーバプッシュ の導入
https://datatracker.ietf.org/doc/html/rfc7540/#autoid-64
サーバがクライアントに対して必要なリソースを自動的にプッシュできる技術
これにより、クライアントがリソースを要求する前に必要なリソースを送信でき、ページの読み込み速度の向上が期待できる
warning.icon Google Chrome は 2022 年に HTTP/2 のサーバプッシュのサポートを終了している
https://developer.chrome.com/blog/removing-push?hl=ja
理由としては、複雑な実装と オーバーヘッド が大きく、使用率が 1% 未満と活用されていなかったため
また、悪意のあるサイトによる攻撃に悪用される懸念がある
たとえば、攻撃者がサーバプッシュを使ってユーザの知らないうちに大量のリソースを押し付け、ブラウザ や デバイス に負荷をかけることができる
代替案
ステータスコード 103 Early Hints の利用
サーバがクライアントに送信するレスポンスにおいて、リソースのヒントのみを伝える
優先度付け の導入
https://datatracker.ietf.org/doc/html/rfc7540/#autoid-23
リクエストに優先度を付ける機能
e.g.
ブラウザが Web サイトを描画する上で必須の要素である HTML や CSS、ユーザが真っ先に見たいテキストや画像の優先順位を高くし、それ以外のリソースの優先度を低くする
これにより、見たいコンテンツが表示されるまでユーザが長時間待機するのを回避できる
UX の向上に繋がる
フロー制御 の導入
https://datatracker.ietf.org/doc/html/rfc7540/#autoid-20
受信側のキャパシティに合わせて送信側のデータ量を調整する技術
TCP にも存在するが、HTTP のレイヤで行うことで多重化されたストリームに対して独立した制御を行うことが可能
HTTP/1.1 との比較を体感できるサイト
http://www.http2demo.io/
#HTTP