1. Introduction (導入)
HTTP [HTTP] リソースの表現 (Representations) が1つ以上の他のリソースとの関係を持つことは一般的です。クライアントは、取得した表現を処理する際にこれらの関係を発見することが多く、それがさらなる取得リクエストにつながる可能性があります。一方、関係の性質によって、クライアントがローカルで利用可能なリソースの処理を継続できるかどうかが決まります。この例として、HTML文書の視覚的レンダリングがあり、文書が参照するカスケーディングスタイルシート (Cascading Style Sheets, CSS) ファイルの取得によってブロックされる可能性があります。対照的に、インライン画像はレンダリングをブロックせず、画像のチャンクが到着するにつれて段階的に描画されます。
HTTP/2 [HTTP/2] とHTTP/3 [HTTP/3] は、単一の接続内でリクエストとレスポンスの多重化 (Multiplexing) をサポートします。多重化を提供するプロトコルの実装における重要な機能は、情報の送信に優先順位を付ける能力です。例えば、HTML文書の意味のあるプレゼンテーションを最も早い時点で提供するためには、HTTPサーバーがクライアントに送信するHTTPレスポンス、またはそれらのHTTPレスポンスのチャンクに優先順位を付けることが重要です。
HTTP/2およびHTTP/3サーバーは、選択した任意の方法で並行レスポンスデータの送信をスケジュールできます。サーバーはクライアントの優先度シグナル (Priority Signals) を無視しても、HTTPレスポンスを正常に提供できます。しかし、クライアントがどのようにリクエストを発行し、レスポンスを消費するかを知らずに動作するサーバーは、最適でないクライアントアプリケーションのパフォーマンスを引き起こす可能性があります。優先度シグナルにより、クライアントはリクエストの優先度に関する見解を伝達できます。サーバーには、クライアントのニーズとは独立した独自のニーズがあるため、レスポンスデータのスケジューリングに情報を提供するために、優先度シグナルと他の利用可能な情報を組み合わせることがよくあります。
RFC 7540 [RFC7540] ストリーム優先度 (Stream Priority) により、クライアントは一連の優先度シグナルを送信して、サーバーに「優先度ツリー (Priority Tree)」を伝達できました。このツリーの構造は、HTTPレスポンス間の帯域幅の相対的な順序付けと加重配分に関するクライアントの好みを表します。サーバーは、これらの優先度シグナルを優先順位決定の入力として使用できました。
RFC 7540ストリーム優先度の設計と実装には、第2節で説明されているように欠点があることが観察されました。HTTP/2 [HTTP/2] は、その結果、これらのストリーム優先度シグナルの使用を非推奨としました。本文書で定義される優先順位付けスキームと優先度シグナルは、RFC 7540ストリーム優先度の代替として機能できます。
本文書は、絶対値を使用してHTTPレスポンスに優先順位を付けるための拡張可能なスキームを記述します。第4節では優先度パラメータ (Priority Parameters) を定義します。これは、優先度情報の標準化された拡張可能な形式です。第5節では、Priority HTTPヘッダーフィールド (Priority HTTP Header Field) を定義します。これは、プロトコルバージョンに依存しないエンドツーエンドの優先度シグナルです。クライアントは、このヘッダーフィールドを送信して、レスポンスがどのように優先順位付けされるべきかについての見解を示すことができます。同様に、中継装置の背後にあるサーバーは、それを使用して中継装置に優先度を示すことができます。リクエストを送信した後、クライアントは、第7.1節と第7.2節で定義されたHTTPバージョン固有のフレーム (Frames) を送信することにより、レスポンスの優先度に関する見解を変更できます(第6節を参照)。
ヘッダーフィールドとフレームの優先度シグナルは、サーバーのレスポンス優先順位付けプロセスへの入力です。これらは単なる提案であり、1つのレスポンスが他のレスポンスに対して特定の処理または送信順序を保証するものではありません。第10節と第12節では、サーバーがシグナルに対してどのように対応するかについての考慮事項とガイダンスを提供します。
1.1. Notational Conventions (表記規則)
本文書のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、「MAY」、および「OPTIONAL」は、BCP 14 [RFC2119] [RFC8174] に記載されているとおりに解釈されるものとします (must)。ただし、ここに示すように、すべて大文字で表示される場合に限ります。
本文書は、構文と解析を指定するために [STRUCTURED-FIELDS] の第3節の以下の用語を使用します: 「Boolean」(ブール値)、「Dictionary」(辞書)、および「Integer」(整数)。
HTTPリクエストとレスポンスの例は、[HTTP/2] のHTTP/2スタイルのフォーマットを使用します。
本文書は、[QUIC] の可変長整数エンコーディング (Variable-Length Integer Encoding) を使用します。
用語「control stream」(制御ストリーム)は、識別子0x0を持つHTTP/2ストリームとHTTP/3制御ストリームの両方を記述するために使用されます。[HTTP/3] の第6.2.1節を参照してください。
用語「HTTP/2 priority signal」(HTTP/2優先度シグナル)は、HTTP/2フレームでクライアントからサーバーに送信される優先度情報を記述するために使用されます。[HTTP/2] の第5.3.2節を参照してください。