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

付録A. HTTP/2からの移行に関する考慮事項 (Considerations for Transitioning from HTTP/2)

HTTP/3はHTTP/2の設計に基づいており、コアセマンティクスを共有しています。この付録は、HTTP/2からHTTP/3への主な違いを要約し、実装者が2つのプロトコル間の関係を理解するのに役立ちます。

A.1. ストリーム (Streams)

HTTP/3はQUICストリームを使用しますが、HTTP/2はTCP上のストリーム抽象化を使用します。主な違い:

  • ストリーム識別子:HTTP/3のストリームIDはQUICによって割り当てられ、HTTP/3によっては割り当てられません
  • ストリーム優先順位:HTTP/3はHTTP/2のストリーム優先順位スキームを含みません
  • フロー制御:HTTP/3はQUICのフロー制御メカニズムを使用します

A.2. HTTPフレームタイプ (HTTP Frame Types)

多くのHTTP/2フレームタイプはHTTP/3で保持または変更されています:

保持されたフレームタイプ:

  • DATA(0x00)- 機能は類似
  • HEADERS(0x01)- 機能は類似
  • SETTINGS(0x04)- 機能は類似だがコントロールストリームのみ
  • PUSH_PROMISE(0x05)- 機能は類似
  • GOAWAY(0x07)- 機能は類似

削除または置換されたHTTP/2フレームタイプ:

  • PRIORITY(0x02)- HTTP/3で削除
  • RST_STREAM(0x03)- QUICのRESET_STREAMで置換
  • PING(0x06)- QUICのPINGフレームで置換
  • WINDOW_UPDATE(0x08)- QUICのフロー制御で置換
  • CONTINUATION(0x09)- HTTP/3では不要

HTTP/3で新しいフレームタイプ:

  • CANCEL_PUSH(0x03)- サーバープッシュをキャンセル
  • MAX_PUSH_ID(0x0d)- プッシュIDスペースを制御

A.3. HTTP/2設定パラメータ (HTTP/2 SETTINGS Parameters)

HTTP/3の設定はHTTP/2とは異なります:

削除された設定:

  • SETTINGS_HEADER_TABLE_SIZE - QPACK設定で置換
  • SETTINGS_ENABLE_PUSH - MAX_PUSH_IDで制御
  • SETTINGS_MAX_CONCURRENT_STREAMS - QUICトランスポートパラメータで制御
  • SETTINGS_INITIAL_WINDOW_SIZE - QUICフロー制御で置換
  • SETTINGS_MAX_FRAME_SIZE - HTTP/3では不要
  • SETTINGS_MAX_HEADER_LIST_SIZE - SETTINGS_MAX_FIELD_SECTION_SIZEで置換

保持された設定:

  • SETTINGS_MAX_FIELD_SECTION_SIZE(0x06)- HTTP/2のSETTINGS_MAX_HEADER_LIST_SIZEに類似

A.4. HTTP/2エラーコード (HTTP/2 Error Codes)

HTTP/3は、HTTP/2のエラーコードとは異なる独自のエラーコードセットを定義しています。実装者はマッピング関係に注意する必要がありますが、直接的な1対1の対応があると仮定すべきではありません。

A.5. その他の違い (Other Differences)

接続管理:

  • HTTP/3は、接続マイグレーションやマルチパスサポートを含むQUICの接続管理を使用します
  • HTTP/2の接続プリアンブルは不要です

サーバープッシュ:

  • HTTP/3のサーバープッシュメカニズムはHTTP/2と類似していますが、異なるフレームとストリームタイプを使用します
  • プッシュIDはHTTP/3で明示的です

フィールド圧縮:

  • HTTP/3はHPACKではなくQPACKを使用します
  • QPACKは順序なし配信を処理するように設計されています

拡張性:

  • HTTP/3はより柔軟な拡張メカニズムを提供します
  • 新しいフレームタイプ、設定、ストリームタイプは交渉なしで使用できます