2. HTTP/3 Protocol Overview (HTTP/3プロトコル概要)
HTTP/3は、QUICトランスポートプロトコル (QUIC Transport Protocol) とHTTP/2に類似した内部フレーミングレイヤー (Framing Layer) を使用して、HTTPセマンティクスのトランスポートを提供します。
クライアントが特定のエンドポイントにHTTP/3サーバーが存在することを知ると、QUIC接続を開きます。QUICは、プロトコルネゴシエーション (Protocol Negotiation)、ストリームベースの多重化 (Stream-Based Multiplexing)、およびフロー制御 (Flow Control) を提供します。HTTP/3エンドポイントの発見については、セクション3.1で説明されています。
各ストリーム内で、HTTP/3通信の基本単位はフレーム (Frame) です(セクション7.2)。各フレームタイプは異なる目的を果たします。たとえば、HEADERSおよびDATAフレームは、HTTPリクエストとレスポンスの基礎を形成します(セクション4.1)。接続全体に適用されるフレームは、専用の制御ストリーム (Control Stream) で伝達されます。
リクエストの多重化は、[QUIC-TRANSPORT] のセクション2で説明されているQUICストリーム抽象化 (Stream Abstraction) を使用して実行されます。各リクエスト-レスポンスペアは、単一のQUICストリームを消費します。ストリームは互いに独立しているため、ブロックされたりパケット損失を被ったりする1つのストリームが、他のストリームの進行を妨げることはありません。
サーバープッシュ (Server Push) は、HTTP/2 ([HTTP/2]) で導入されたインタラクションモードであり、クライアントが指定されたリクエストを行うことを予測して、サーバーがクライアントにリクエスト-レスポンス交換をプッシュすることを許可します。これは、ネットワーク使用量と潜在的なレイテンシ向上とのトレードオフです。PUSH_PROMISE、MAX_PUSH_ID、CANCEL_PUSHなど、複数のHTTP/3フレームがサーバープッシュの管理に使用されます。
HTTP/2と同様に、リクエストおよびレスポンスフィールド (Fields) は送信のために圧縮されます。HPACK ([HPACK]) は圧縮されたフィールドセクション (Field Sections) の順序付き送信に依存しているため(QUICが提供しない保証)、HTTP/3はHPACKをQPACK ([QPACK]) に置き換えます。QPACKは、個別の単方向ストリームを使用してフィールドテーブル状態 (Field Table State) を変更および追跡しますが、エンコードされたフィールドセクションはテーブルの状態を変更せずに参照します。
2.1. Document Organization (文書構成)
以下のセクションでは、HTTP/3接続のライフサイクルの詳細な概要を提供します:
-
"Connection Setup and Management"(接続のセットアップと管理)(セクション3)は、HTTP/3エンドポイントがどのように発見され、HTTP/3接続がどのように確立されるかをカバーします。
-
"Expressing HTTP Semantics in HTTP/3"(HTTP/3でのHTTPセマンティクスの表現)(セクション4)は、フレームを使用してHTTPセマンティクスがどのように表現されるかを説明します。
-
"Connection Closure"(接続のクローズ)(セクション5)は、HTTP/3接続が正常にまたは突然終了する方法を説明します。
ワイヤプロトコル (Wire Protocol) とトランスポートとのインタラクションの詳細は、後続のセクションで説明されています:
-
"Stream Mapping and Usage"(ストリームマッピングと使用)(セクション6)は、QUICストリームの使用方法を説明します。
-
"HTTP Framing Layer"(HTTPフレーミングレイヤー)(セクション7)は、ほとんどのストリームで使用されるフレームを説明します。
-
"Error Handling"(エラー処理)(セクション8)は、特定のストリームまたは接続全体に対して、エラー条件がどのように処理および表現されるかを説明します。
最後のセクションでは追加のリソースが提供されます:
-
"Extensions to HTTP/3"(HTTP/3の拡張)(セクション9)は、将来の文書で新しい機能を追加する方法を説明します。
-
HTTP/2とHTTP/3のより詳細な比較は、付録Aにあります。
2.2. Conventions and Terminology (規約と用語)
本文書のキーワード "MUST"(しなければならない)、"MUST NOT"(してはならない)、"REQUIRED"(必須である)、"SHALL"(しなければならない)、"SHALL NOT"(してはならない)、"SHOULD"(すべきである)、"SHOULD NOT"(すべきでない)、"RECOMMENDED"(推奨される)、"NOT RECOMMENDED"(推奨されない)、"MAY"(してもよい)、および "OPTIONAL"(任意である)は、BCP 14 [RFC2119] [RFC8174] に記載されているように解釈されるものとし、ここに示すようにすべて大文字で表示される場合に限ります。
本文書は、[QUIC-TRANSPORT] の可変長整数エンコーディング (Variable-Length Integer Encoding) を使用します。
以下の用語が使用されます:
abort(中止): 接続またはストリームの突然の終了。エラー条件が原因である可能性があります。
client(クライアント): HTTP/3接続を開始するエンドポイント。クライアントはHTTPリクエストを送信し、HTTPレスポンスを受信します。
connection(接続): QUICをトランスポートプロトコルとして使用する2つのエンドポイント間のトランスポート層接続。
connection error(接続エラー): HTTP/3接続全体に影響を与えるエラー。
endpoint(エンドポイント): 接続のクライアントまたはサーバー。
frame(フレーム): HTTP/3のストリーム上の通信の最小単位。ヘッダーとフレームタイプに従って構造化された可変長バイトシーケンスで構成されます。
"フレーム"と呼ばれるプロトコル要素は、本文書と [QUIC-TRANSPORT] の両方に存在します。[QUIC-TRANSPORT] のフレームが参照される場合、フレーム名には"QUIC"というプレフィックスが付けられます。たとえば、"QUIC CONNECTION_CLOSE frames"。このプレフィックスのない参照は、セクション7.2で定義されたフレームを指します。
HTTP/3 connection(HTTP/3接続): ネゴシエートされたアプリケーションプロトコルがHTTP/3であるQUIC接続。
peer(ピア): エンドポイント。特定のエンドポイントについて議論する場合、"peer"は議論の主題からリモートのエンドポイントを指します。
receiver(受信者): フレームを受信しているエンドポイント。
sender(送信者): フレームを送信しているエンドポイント。
server(サーバー): HTTP/3接続を受け入れるエンドポイント。サーバーはHTTPリクエストを受信し、HTTPレスポンスを送信します。
stream(ストリーム): QUICトランスポートによって提供される双方向または単方向のバイトストリーム (Bytestream)。HTTP/3接続内のすべてのストリームは"HTTP/3ストリーム"と見なすことができますが、HTTP/3内では複数のストリームタイプが定義されています。
stream error(ストリームエラー): 個々のストリームのアプリケーションレベルエラー。
"content"(コンテンツ)という用語は、[HTTP] のセクション6.4で定義されています。
最後に、"resource"(リソース)、"message"(メッセージ)、"user agent"(ユーザーエージェント)、"origin server"(オリジンサーバー)、"gateway"(ゲートウェイ)、"intermediary"(中継者)、"proxy"(プロキシ)、および "tunnel"(トンネル)という用語は、[HTTP] のセクション3で定義されています。
本文書のパケット図 (Packet Diagrams) は、フィールドの順序とサイズを示すために、[QUIC-TRANSPORT] のセクション1.3で定義された形式を使用します。