13. Fairness (公平性)
通常、HTTP実装は、帯域幅を競合する接続間で公平性を維持するために、基盤となるトランスポートに依存します。中継装置がクライアント接続でHTTPリクエストを受信すると、それらをバックエンド接続に転送します。中継装置が異なるバックエンド接続間でリクエストをどのように統合または分割するかによって、異なるクライアントが異なるパフォーマンスを経験する可能性があります。中継装置がリクエストを転送する際に優先度シグナルも使用する場合、この変動は増幅される可能性があります。第13.1節と第13.2節では、この不公平性の増幅の緩和策について説明します。
逆に、第13.3節では、サーバーが優先度シグナルに基づいて特定の接続に意図的に不平等な帯域幅を割り当てる方法について説明します。
13.1. Coalescing Intermediaries (統合中継装置)
中継装置が複数のクライアントからのHTTPリクエストを1つのHTTP/2またはHTTP/3接続でバックエンドサーバーに統合する場合、1つのクライアントから発信されたリクエストは、他のクライアントからのリクエストよりも高い優先度を示すシグナルを運ぶ可能性があります。
中継装置の背後で実行されているサーバーがPriorityヘッダーフィールド値に従うことは、時には有益です。たとえば、リソースが制約されたサーバーは、バックグラウンド緊急度レベル (7) のソフトウェア更新ファイルの送信を延期する可能性があります。しかし、最悪の場合、複数のクライアントによって宣言された優先度間の非対称性により、1つのユーザーエージェント向けのすべてのレスポンスが、別のユーザーエージェント向けのすべてのレスポンスが完全に送信されるまで遅延される可能性があります。
この公平性の問題を緩和するために、サーバーは中継装置に関する知識を優先順位付けの決定における別の入力として使用できます。たとえば、サーバーが中継装置がリクエストを統合していることを知っている場合、レスポンスを完全に提供することを避け、代わりに帯域幅を(たとえば、ラウンドロビン方式で)割り当てることができます。制約されたリソースが中継装置とユーザーエージェント間のネットワーク容量である場合、中継装置がレスポンスをバッファリングし、実装している優先順位付けスキームに従ってチャンクを転送するため、これは機能します。
サーバーは、構成によってリクエストが中継装置から来たことを判断できます。または、リクエストに次のヘッダーフィールドのいずれかが含まれているかどうかを確認できます:
-
Forwarded [FORWARDED]、X-Forwarded-For
-
Via([HTTP]の第7.6.3節を参照)
13.2. HTTP/1.x Back Ends (HTTP/1.xバックエンド)
コンテンツ配信ネットワーク (CDN) インフラストラクチャがフロントエンドとバックエンドで異なるHTTPバージョンをサポートすることは一般的です。たとえば、クライアント向けのエッジはHTTP/2とHTTP/3をサポートする一方で、バックエンドサーバーとの通信はHTTP/1.1を使用して行われます。接続統合とは異なり、CDNはリクエストをバックエンドへの離散接続に「逆多重化」します。HTTP/1.1(またはそれ以前)は単一接続内でのレスポンス多重化をサポートしていないため、公平性の問題はありません。ただし、バックエンドサーバーは、リクエストスケジューリングにクライアントヘッダーを使用してもかまいません (MAY)。バックエンドサーバーは、その情報が単一のエンドクライアントにスコープできる場合にのみ、クライアント優先度情報に基づいてスケジュールすべきです (SHOULD)。認証およびその他のセッション情報がこの関連性を提供する可能性があります。
13.3. Intentional Introduction of Unfairness (意図的な不公平性の導入)
時には、そうすることが接続間、したがってそれらの接続で提供されるリクエスト間にある程度の不公平性を導入することを知りながら、1つの接続の送信を他の接続に対して優先順位を下げることが有益です。
たとえば、サーバーは、バックグラウンド優先度のレスポンス(ソフトウェア更新イメージなど)のみを運ぶ接続で、スカベンジャー輻輳制御器を使用する可能性があります。そうすることで、更新の配信を遅延させる代わりに、他の接続の応答性が向上します。