HTTP/2 は、1.1の課題を解決するために開発された次世代のプロトコルであり、2015年に RFC 7540 により標準化された。Googleが開発した SPDY プロトコルをベースにしており、パフォーマンスと効率に特化している。

特徴

バイナリプロトコル

1.xまではテキストベースだったものが、HTTP/2では完全にバイナリ形式になった。これにより、パース処理が高速になり、エラーも減る。

マルチプレクシング

1つのTCP接続中に複数のリクエスト・レスポンスを並列に処理可能となった。
すなわち、これで順番待ちがなくなり、Head-of-Line Blocking問題を軽減することができる。

ストリーム制御

各リクエストは「ストリーム」という単位で管理。

ストリームには優先順位やフローの制御が可能である。

サーバープッシュ

クライアントがリクエストする前に、サーバーが必要になりそうなリソースを先に送信できる(例:ウェブページが含むCSSやJS)。

ヘッダ圧縮(HPACK)

冗長なヘッダ情報を効率良く圧縮することで、通信量を削減できる。

課題

  • TCPベースのため、パケットロス時にそれを待つために全ストリームが止まる。これがまだ残ってるHOL問題。これは、3で解消されることとなる。
  • サーバープッシュは扱いが難しく、現状あまり普及していない。