2.1.3. Binary-Wrapped HTTP Fields (バイナリでラップした HTTP フィールド)
2.1.3. Binary-Wrapped HTTP Fields (バイナリでラップした HTTP フィールド)
問題の HTTP フィールドの値がアプリケーションにより, 特にセクション 7.5.6 で論じるとおり複数の値を単一行に結合することに関してシリアル化上の問題を起こすことが既知である場合, 署名者はコンポーネント識別子に bs パラメータを含めるべきである. これは, フィールドの値を結合する前にバイナリ構造でラップする必要があることを示す.
このパラメータがコンポーネント識別子に含まれる場合, コンポーネント値は次のアルゴリズムを用いて計算されなければならない.
-
入力を, メッセージ内に現れる順序でのフィールドの値の順序付き集合とする.
-
処理済みフィールド値を蓄積する空の List を作成する.
-
集合内の各フィールド値について,
3.1. フィールド値から先頭および末尾の空白を除去する. HTTP フィールド値は先頭末尾の空白を含んではならないため, 適合実装ではこれは何もしない.
3.2. 行内の廃止された行折りを除去し, [HTTP/1.1] のセクション 5.2 で論じるとおり単一の空白 (
" ")) に置き換える. この挙動は [HTTP/1.1] に固有であり, HTTP 仕様の他バージョンには適用されない.3.3. 得られたフィールド値のバイトを Byte Sequence として符号化する. ほとんどのフィールドは ASCII 文字に制限されるが, 一部の実装では値に他のオクテットが含まれてよい.
3.4. Byte Sequence を List 蓄積器に追加する.
-
中間結果は Byte Sequence 値の List である.
-
[STRUCTURED-FIELDS] のセクション 4.1.1 で記述される List の厳密シリアル化に従い, この出力を返す.
例えば, 内部のコンマにより次のフィールドは個別のフィールド値を安全に結合できない.
Example-Header: value, with, lots Example-Header: of, commas
この例では, 同一フィールドを意味的に異なる単一の値で送ることもできる.
Example-Header: value, with, lots, of, commas
これら 2 つの版はアプリケーションによって異なる扱いを受ける. しかし, パラメータなしで署名ベースに含めると, 両方の場合でコンポーネント値は同じになる.
"example-header": value, with, lots, of, commas
一方, bs パラメータを付加すると, 2 つの別インスタンスは次のように符号化されシリアル化される.
"example-header";bs: :dmFsdWUsIHdpdGgsIGxvdHM=:, :b2YsIGNvbW1hcw==:
上記の単一インスタンスのフィールドに対する bs パラメータ付きの符号化は次のとおりである.
"example-header";bs: :dmFsdWUsIHdpdGgsIGxvdHMsIG9mLCBjb21tYXM=:
このコンポーネント値は複数インスタンスのフィールドの上記のものとは異なり, 悪用されうる衝突を防ぐ.