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

4. Priority Parameters (優先度パラメータ)

優先度情報は、将来の拡張のための余地を提供する、一連のキーと値のペア (Key-Value Pairs) です。各キーと値のペアは、優先度パラメータ (Priority Parameter) を表します。

Priority HTTPヘッダーフィールド(第5節)は、リクエストまたはレスポンスが発行されるときに、この優先度パラメータのセットを送信するエンドツーエンドの方法です。リクエストを送信した後、クライアントは、第7.1節と第7.2節で定義されたHTTPバージョン固有のPRIORITY_UPDATEフレームを送信することにより、レスポンスの優先度に関する見解を変更できます(第6節)。フレームは単一のホップでのみ優先度パラメータを送信します。

中継装置 (Intermediaries) は、PRIORITY_UPDATEフレームまたはPriorityヘッダーフィールドで優先度シグナルを消費および生成できます。Priorityリクエストヘッダーフィールドのみを次のホップに渡す中継装置は、クライアントからの元のエンドツーエンドシグナルを保持します。第14節を参照してください。中継装置は、Priorityヘッダーフィールドを渡し、さらにPRIORITY_UPDATEフレームを送信できます。これにより、元のクライアントのエンドツーエンドシグナルを保持しながら、第7節のガイダンスに従って次のホップに異なる優先度を使用するよう指示する効果があります。Priorityリクエストヘッダーフィールドを置き換えるか追加する中継装置は、元のクライアントのエンドツーエンドシグナルを上書きし、リクエストのすべての後続の受信者の優先順位付けに影響を与える可能性があります。

Priorityヘッダーフィールドとpriority_updateフレームの両方について、優先度パラメータのセットはDictionary(辞書)としてエンコードされます([STRUCTURED-FIELDS]の第3.2節を参照)。

本文書は、urgency (u) とincremental (i) の優先度パラメータを定義します。これらの優先度パラメータを持たないHTTPリクエストを受信した場合、サーバーはそれらのデフォルト値が指定されたかのように動作すべきです (SHOULD)。

中継装置は、転送するリクエストとレスポンスからのシグナルを組み合わせることができます。レスポンスでの優先度パラメータの省略は、リクエストでの省略とは異なる方法で処理されることに注意してください。第8節を参照してください。

受信者は、[STRUCTURED-FIELDS]の第4.2節で説明されているようにDictionaryを解析します。Dictionaryが正常に解析された場合、本文書は、未知の優先度パラメータ、範囲外の値を持つ優先度パラメータ、または予期しないタイプの値を無視しなければならない (MUST) という追加要件を課します。

4.1. Urgency (緊急度)

urgency (u) パラメータ値はInteger(整数)([STRUCTURED-FIELDS]の第3.3.1節を参照)で、0から7までの範囲(0と7を含む)で、優先度の降順です。デフォルトは3です。

エンドポイントは、このパラメータを使用してHTTPレスポンスの優先順位に関する見解を伝達します。urgencyの選択された値は、サーバーがこの情報を使用してHTTPレスポンスを緊急度の順序で送信する可能性があるという期待に基づくことができます。値が小さいほど、優先度が高くなります。

次の例は、urgencyが0に設定されたCSSファイルのリクエストを示しています:

:method = GET
:scheme = https
:authority = example.net
:path = /style.css
priority = u=0

複数のHTTPリソースで構成される可能性のあるドキュメント(例:HTML)を取得するクライアントは、メインリソースにデフォルトの緊急度レベルを割り当てるべきです (SHOULD)。この規約により、サーバーはウェブサイト固有の知識を使用して緊急度を調整できます(第8節を参照)。

最低の緊急度レベル (7) は、ソフトウェア更新の配信などのバックグラウンドタスク用に予約されています。この緊急度レベルは、ユーザーインタラクションに影響を与えるレスポンスの取得に使用すべきではありません (SHOULD NOT)。

4.2. Incremental (インクリメンタル)

incremental (i) パラメータ値はBoolean(ブール値)([STRUCTURED-FIELDS]の第3.3.6節を参照)です。これは、HTTPレスポンスが段階的に処理できるかどうか、つまり、レスポンスのチャンクが到着するにつれて何らかの意味のある出力を提供できるかどうかを示します。

incrementalパラメータのデフォルト値はfalse (0) です。

クライアントがincrementalパラメータをfalseに設定して並行リクエストを行う場合、クライアントはそれらのレスポンスを段階的に処理しないため、同じurgencyで並行してレスポンスを提供する利点はありません。同じurgencyの非インクリメンタルレスポンスを、それらのリクエストが生成された順序で1つずつ提供することが最良の戦略と考えられます。

クライアントがincrementalパラメータをtrueに設定して並行リクエストを行う場合、同じurgencyでリクエストを並行して提供することが有益である可能性があります。これを行うと接続帯域幅が分散され、レスポンスの完了に時間がかかることを意味します。インクリメンタル配信は、完全なレスポンスが利用可能になる前に、複数の部分的なレスポンスがクライアントに何らかの価値を提供する可能性がある場合に最も有用です。

次の例は、urgencyパラメータが5に設定され、incrementalパラメータがtrueに設定されたJPEGファイルのリクエストを示しています。

:method = GET
:scheme = https
:authority = example.net
:path = /image.jpg
priority = u=5, i

4.3. Defining New Priority Parameters (新しい優先度パラメータの定義)

新しい優先度パラメータを定義しようとする場合、新しく定義された優先度パラメータを理解しない既存のエンドポイントや中継装置によって実行される優先順位付けに悪影響を与えないように注意する必要があります。未知の優先度パラメータは無視されるため、新しい優先度パラメータは、後方互換性がないか、フォールバックセーフでない方法でurgency(第4.1節を参照)またはincremental(第4.2節を参照)優先度パラメータの解釈を変更したり、変更したりすべきではありません。

例えば、8つの緊急度レベルよりも細かい粒度を提供する必要がある場合、追加の優先度パラメータを使用して範囲を細分化することが可能です。パラメータを認識しない実装は、粒度の低い8つのレベルを安全に使用し続けることができます。

あるいは、urgencyを拡張することもできます。例えば、グラフィカルユーザーエージェントは、要求されているリソースがビューポート内にあるかどうかを示すためにvisible優先度パラメータを送信できます。

汎用的な優先度パラメータは、ベンダー固有、アプリケーション固有、またはデプロイメント固有の値よりも優先されます。コミュニティで汎用的な値について合意できない場合、パラメータの名前は対応して具体的であるべきです(例:ベンダー、アプリケーション、またはデプロイメントを識別するプレフィックスを付ける)。

4.3.1. Registration (登録)

新しい優先度パラメータは、「HTTP Priority」レジストリに登録することで定義できます。このレジストリは、Dictionaryで使用されるキー(短いテキスト文字列)を管理します([STRUCTURED-FIELDS]の第3.2節を参照)。各HTTPリクエストには関連する優先度シグナルがある可能性があるため、特に単一文字の文字列など、短いキー長を持つことに価値があります。魅力的なキー値間の意図しない競合を回避しながら拡張を奨励するために、「HTTP Priority」レジストリは、キーの長さに応じて2つの登録ポリシーを運用します。

  • キー長が1の優先度パラメータの登録リクエストは、[RFC8126]の第4.6節に従って、Specification Required(仕様が必要)ポリシーを使用します。

  • キー長が1より大きい優先度パラメータの登録リクエストは、[RFC8126]の第4.5節に従って、Expert Review(専門家レビュー)ポリシーを使用します。仕様文書は歓迎されますが、必須ではありません。

登録リクエストをレビューする際、指定された専門家は第4.3節で提供される追加のガイダンスを考慮できますが、それを拒否の根拠として使用することはできません。

登録リクエストは次のテンプレートを使用すべきです:

Name(名前):[パラメータキーに一致する優先度パラメータの名前]

Description(説明):[優先度パラメータのセマンティクスと値の説明]

Reference(参照):[この優先度パラメータを定義する仕様]

登録リクエストの送信先の詳細については、https://www.iana.org/assignments/http-priority のレジストリを参照してください。