HTTP/2は一つの接続で複数の要求を多重化しますが、どの応答データを先に送るかは別のスケジューリング問題です。RFC 9218は、クライアントや中継処理がHTTP応答に対する相対的な優先希望を表す共通方式を定めています。この値はサーバーが考慮するための信号であり、あるリソースが必ず先に届くという保証ではありません。ブラウザーの希望、サーバーのキュー、ネットワーク状態、アプリケーションの方針が結果に関わります。

HTTP/2の優先度シグナルとサーバー応答スケジューリングの概念図

1. 従来の依存関係ツリーが難しかった理由

従来のHTTP/2優先度モデルは、ストリーム間の依存関係と重みをツリーで表現していました。実際にはブラウザーとサーバーでツリーの状態が一致しない場合があり、新しい要求の追加後に関係が変わることもあります。実装ごとに解釈や更新の扱いが異なると、同じ優先度情報でも動作が揃いません。RFC 9218は複雑な依存状態を共有する代わりに、各応答の希望属性を伝えるモデルを採用しています。

この変更によって、トランスポート層がアプリケーションデータを自動的に並べ替えるわけではありません。HTTP/2は引き続き一つのTCP接続でストリームを多重化し、サーバー実装が応答フレームをいつ作って送るかを決めます。プロトコル信号を扱えることと、利用者に見える読み込み順が変わることは別です。ブラウザーが新しい信号を送るか、サーバーのスケジューラーがそれを使うかを確認してください。

移行中は以前の優先度フレームを目にすることもあります。新しいPriorityフィールドと更新フレームを使う場合でも、ブラウザー、プロキシ、CDN、オリジンサーバーのどこが信号を理解するかを記録します。リクエストにPriorityが含まれていることだけでは、サーバーの送信スケジュールが変わった証拠にはなりません。

2. urgencyとincrementalの読み方

Priorityフィールドのuパラメーターは0から7までのurgencyを表します。小さい数ほど緊急度の高い希望を示し、省略時の既定値は3です。iパラメーターはincrementalな配信が望ましいかを表します。省略時はfalseで、trueはi=?1と表します。真の場合、応答全体の完了だけを待つのではなく、複数の応答を進めながらデータの一部を先に送る判断が適する場合があります。

これらの属性は希望であり、締め切りや厳密なキュー順位ではありません。urgencyは帯域を予約せず、値が0でもその応答が必ず最初に完了するとは限りません。サーバーの方針、応答サイズ、データがすでに用意されているか、混雑状況、他の要求によって実際に可能な処理は変わります。値だけで画面のどの操作が妨げられているかや、完全な依存関係も表現できません。

ストリームや大きなリソースなど、利用側が部分データを使える場合は段階的配信が役立つことがあります。一方、小さく完結した応答は早く完了した方がよい場合があります。適切な選択はリソースの役割と利用方法に依存します。iを指定しただけで応答が分割されたり、サーバーに交互送信が強制されたりするわけではありません。ファイル拡張子だけで値を決めず、実際の消費方法を確認します。

3. 要求開始後の優先度更新

文書の処理開始時点では、ブラウザーがすべてのリソースや現在の画面への影響を知っているとは限りません。スタイルシート、スクリプト、画像などは時間差で見つかります。そのためRFC 9218は初期のPriorityフィールドに加え、HTTP/2とHTTP/3で優先度を更新するフレームを定義しています。サーバーはまだ送信していない応答データについて、後から届いた情報を使ってスケジュールを見直せます。

すでに送信したバイトを取り消すことはできず、サーバーがすべての変更を受け入れる義務もありません。クライアントが更新を送り、経路上のプロキシやCDNが保持し、サーバーのスケジューラーが有用な形で適用する必要があります。Cloudflareの運用記事は、ブラウザーの信号とサーバー側の処理が連携する実務上の論点を説明しています。ただし、すべてのHTTP/2サービスが同じ動作をする根拠ではありません。

診断では要求と更新の信号を確認したうえで、サーバーのスケジューリング記録やブラウザーの性能データと照合します。更新がオリジンまで届いたか、対象応答がまだ保留中だったか、スケジューラーの判断が変わったかを調べます。ヘッダーの記録から分かるのはクライアントが送った内容であり、それだけで送信順やページ表示が改善したとは言えません。

4. 実務家の視点:効果を確かめるための測定

まず代表的なページを選び、ブラウザーのPriority値、要求の発生時刻、応答サイズ、完了時刻を記録します。サーバーがフレームを送る順番や画面表示の指標と合わせて比較してください。キャッシュ状態、接続再利用、CDN、ネットワーク条件をテスト間で揃えます。段階的配信を試すときは、部分的な進捗を利用側が使えるか、小さな応答が重要な操作を妨げないかも確認します。

優先度はスケジューリングに使う入力の一つです。サーバーがすべての応答をすぐ生成できる場合や接続が制約されていない場合、相対的な希望を変えても目に見える差が小さい可能性があります。誤った分類は重要な応答を遅らせることもあります。最初は限られた要求に適用して観測し、製品上の重要度からプロトコル値への対応を調整してください。全ページで使える万能なurgency表があると仮定しないことが大切です。

RFC 9218が定めるのは、層をまたいで伝える優先希望の表現と更新方法です。何を送るかはブラウザーが選び、その信号を現在の実装や状況に合わせてどう扱うかはサーバーが決めます。この役割を分けて考えれば、HTTP/2が重要なファイルを自動認識し、必ず先に届けるという誤解を避けられます。

参考資料