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

1. Introduction (序論)

ハイパーテキスト転送プロトコル (HTTP, [HTTP]) を使用するアプリケーションのパフォーマンスは、各HTTPバージョンが基礎となるトランスポート (Transport) をどのように使用するか、およびトランスポートが動作する条件に関連しています。

複数の同時リクエストを行うことで、レイテンシを削減し、アプリケーションのパフォーマンスを向上させることができます。HTTP/1.0では、特定のTCP [TCP] 接続上で一度に1つのリクエストのみが未完了であることが許可されていました。HTTP/1.1 [HTTP/1.1] はリクエストパイプライン処理 (Request Pipelining) を追加しましたが、これはリクエストの同時実行性を部分的にしか解決せず、アプリケーション層のヘッドオブライン・ブロッキング (Head-of-Line Blocking) の影響を依然として受けます。したがって、HTTP/1.0およびHTTP/1.1クライアントは、同時リクエストを行うためにサーバーへの複数の接続を使用します。

さらに、HTTPフィールドは多くの場合、反復的で冗長であり、不必要なネットワークトラフィックを引き起こし、また初期TCPウィンドウ (Congestion Window) をすぐに満たしてしまいます。これにより、新しいTCP接続で複数のリクエストが行われる場合、過度のレイテンシが発生する可能性があります。

HTTP/2は、HTTPのセマンティクスを基礎となる接続への最適化されたマッピング (Optimized Mapping) を定義することで、これらの問題に対処します。具体的には、同じ接続上でのメッセージのインターリーブ (Interleaving) を可能にし、HTTPフィールドに対して効率的なエンコーディング (Efficient Coding) を使用します。また、リクエストの優先順位付け (Prioritization) を可能にし、より重要なリクエストをより迅速に完了させることで、パフォーマンスをさらに向上させます。

結果として得られるプロトコルは、HTTP/1.xと比較してより少ないTCP接続を使用できるため、ネットワークに対してより親和的です。これは、他のフローとの競合が少なくなり、接続の寿命が長くなることを意味し、それによって利用可能なネットワーク容量のより良い活用につながります。ただし、TCPヘッドオブライン・ブロッキングはこのプロトコルでは対処されていないことに注意してください。

最後に、HTTP/2はバイナリメッセージフレーミング (Binary Message Framing) の使用を通じて、メッセージのより効率的な処理も可能にします。

本文書はRFC 7540およびRFC 8740を廃止します。附録Bに顕著な変更を記載しています。