メインコンテンツまでスキップ

2. HTTP/2プロトコル概要 (HTTP/2 Protocol Overview)

HTTP/2は、HTTPセマンティクスの最適化されたトランスポート (Optimized Transport) を提供します。HTTP/2は、HTTP/1.1のすべてのコア機能 (Core Features) をサポートしますが、いくつかの点でより効率的であることを目指しています。

HTTP/2の基本的なプロトコル単位はフレーム (Frame) です (Section 4.1)。各フレームタイプは異なる目的を果たします。例えば、HEADERSフレームとDATAフレームは、HTTPリクエスト (HTTP Requests) とレスポンス (Responses) の基礎を形成します (Section 8.1)。SETTINGS、WINDOW_UPDATE、PUSH_PROMISEなどの他のフレームタイプは、他のHTTP/2機能をサポートするために使用されます。

リクエストの多重化 (Multiplexing) は、各HTTP リクエスト/レスポンス交換を独自のストリーム (Stream) に関連付けることで実現されます (Section 5)。ストリームは互いにほぼ独立しているため、ブロックされたまたは停止したリクエストまたはレスポンスが他のストリームの進行を妨げることはありません。

フロー制御 (Flow Control) と優先順位付け (Prioritization) により、多重化されたストリームを効率的に使用することが可能になります。フロー制御 (Section 5.2) は、受信者が使用できるデータのみが送信されることを保証するのに役立ちます。優先順位付け (Section 5.3) は、限られたリソースを最も重要なストリームに最初に向けることができることを保証します。

HTTP/2は、サーバーがクライアントにレスポンスをプッシュできる新しいインタラクションモード (Interaction Mode) を追加します (Section 8.2)。サーバープッシュ (Server Push) により、サーバーはクライアントが必要とするとサーバーが予測するデータを投機的にクライアントに送信でき、潜在的なレイテンシの向上とネットワーク使用量のトレードオフを行います。サーバーは、PUSH_PROMISEフレームとして送信するリクエストを合成することでこれを実行します。その後、サーバーは別のストリームで合成されたリクエストへのレスポンスを送信できます。

接続で使用されるHTTPヘッダーフィールドには大量の冗長データが含まれる可能性があるため、それらを含むフレームは圧縮されます (Section 4.3)。これは、一般的なケースでリクエストサイズに特に有利な影響を与え、多くのリクエストを1つのパケットに圧縮できるようにします。