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

1.3. HTTP Message Transformations (HTTP メッセージの変換)

1.3. HTTP Message Transformations (HTTP メッセージの変換)

前述のとおり, HTTP は実装に対し, さまざまな方法でメッセージを変換することを明示的に許容し, 場合によってはそれを要求する. 実装は, これらの変換の多くに耐えなければならない. 以下は, HTTP のもとで起こりうる変換の参考的かつ網羅的でない一覧であり, 文脈として示す.

  • 異なるフィールド名を持つフィールドの並べ替え ([HTTP] のセクション 5.3).

  • 同一フィールド名を持つフィールドの結合 ([HTTP] のセクション 5.2).

  • Connection ヘッダフィールドに列挙されたフィールドの除去 ([HTTP] のセクション 7.6.1).

  • 制御オプションを示すフィールドの追加 ([HTTP] のセクション 7.6.1).

  • transfer coding の追加または除去 ([HTTP] のセクション 7.7).

  • Via ([HTTP] のセクション 7.6.3) や Forwarded ([RFC7239] のセクション 4) などのフィールドの追加.

  • HTTP の異なるバージョン間の変換 (例: HTTP/1.x と HTTP/2, またはその逆).

  • 大文字小文字の変更 (例: Originorigin に), フィールド名, リクエスト URI の scheme, ホストなど大文字小文字を区別しない構成要素に対して.

  • 一緒に適用したときにメッセージの target URI を変えないような, リクエストターゲットおよび authority の変更 ([HTTP] のセクション 7.1 で定義).

加えて, 非推奨であるか別の理由で許可されていないが, 実運用では依然として起こりうる変換がある. これらの変換は署名を破壊せずに扱い得る, 次のような動作を含む.

  • フィールド値の先頭または末尾の空白の使用, 追加, または除去.

  • フィールド値における obs-fold の使用, 追加, または除去 ([HTTP/1.1] のセクション 5.2).

これらの種類の変換は, 署名によって被覆されたメッセージ構成要素に対して行われても署名検証を妨げないべき変換として識別できる. また, 署名によって被覆されていない構成要素へのすべての変更も, 署名検証を妨げないべきである.

この種の変換の例と, メッセージ署名への影響は, 付録 B.4 にある.

一方, 被覆コンポーネントのフィールド値をパースして再シリアル化する, または派生コンポーネントの値を変更するなどの他の変換は, 署名がターゲットメッセージに対して検証不能になる原因になりうる. 本仕様の適用は, アプリケーションが想定する変換が, 被覆コンポーネントの選択によって十分に扱われるように注意しなければならない.