2. HTTP Message Components (HTTP メッセージ構成要素)
2. HTTP Message Components (HTTP メッセージ構成要素)
署名者と検証者が, どの構成要素が署名によって被覆されるかを確立できるようにするため, 本書は HTTP メッセージ署名によって被覆される構成要素に対するコンポーネント識別子, これらのコンポーネント識別子に関連付けられる値を HTTP メッセージから導出し正規化する規則の集合, およびこれらの正規化済み値を署名ベース (signature base) にまとめる手段を定義する.
これらの値を導出するための署名コンテキスト (signature context) は, メッセージの署名者と検証者の両方がアクセス可能でなければならない. コンテキストは, 所与の署名におけるすべての構成要素にわたって同一でなければならない. 例えば, @query 派生コンポーネントには生のクエリ文字列を用い, @query-param 派生コンポーネントには結合されたクエリおよびフォームパラメータを用いる, といったことは誤りである. メッセージ構成要素コンテキストに関するさらなる考慮事項はセクション 7.4.3 を参照.
コンポーネント識別子は, コンポーネント名とその名前に関連付けられた任意のパラメータからなる. 各コンポーネント名は, HTTP フィールド名 (セクション 2.1) または登録済みの派生コンポーネント名 (セクション 2.2) のいずれかである. コンポーネント識別子に対して可能なパラメータは識別子に依存する. 可能なすべてのパラメータを一覧する "HTTP Signature Component Parameters" レジストリはセクション 6.5 で定義される.
単一の被覆コンポーネント一覧内では, 各コンポーネント識別子は 1 回だけ現れなければならない. コンポーネント名が異なるか, 同一コンポーネント名に対してパラメータのいずれかが異なる場合, 一方のコンポーネント識別子は他方と区別される. 同一コンポーネント名でも "foo";bar と "foo";baz のようにパラメータにより区別される識別子であれば, 複数含めてよい. パラメータの順序は, コンポーネント識別子の処理中 (検証時のパースなど) に保存されなければならないが, 2 つのコンポーネント識別子の等価性検査ではパラメータの順序は意味を持たない. つまり, "foo";bar;baz と "foo";baz;bar は同一メッセージに共存できない. これら 2 つのコンポーネント識別子は等価であるが, 一方の形を処理するシステムが他方の形へ変換してはならない.
コンポーネント識別子に関連付けられるコンポーネント値は識別子自身によって定義される. コンポーネント値は改行 (\n) 文字を含んではならない. 一部の HTTP メッセージ構成要素は, コンポーネント値の意味を変えずにビット列を変える変換 (フィールド値の結合など) を受けうる. したがってメッセージ構成要素の値は署名前に正規化する必要があり, そのような中間者による変換があっても署名を検証できるようにする. 本書は各コンポーネント識別子について, 識別子に関連付けられたコンポーネント値をそのような正規形へ変換する規則を定義する.
以下の節では, コンポーネント識別子名, そのパラメータ, 関連する値, および値の正規化規則を定義する. メッセージ構成要素を署名ベースにまとめる方法はセクション 2.5 で定義される.