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で解消されることとなる。
- サーバープッシュは扱いが難しく、現状あまり普及していない。