2. Composants de message HTTP (HTTP Message Components)
2. Composants de message HTTP
Pour permettre aux signataires et vérificateurs de convenir des composants couverts par une signature, ce document définit des identifiants de composant pour les éléments couverts par une signature de message HTTP, un ensemble de règles pour dériver et canoniser les valeurs associées à ces identifiants à partir du message HTTP, et le moyen de combiner ces valeurs canonisées en une base de signature.
Le contexte de signature pour dériver ces valeurs DOIT être accessible au signataire et au vérificateur du message. Le contexte DOIT être le même pour tous les composants d'une signature donnée. Par exemple, il serait erroné d'utiliser la chaîne de requête brute pour le composant dérivé @query mais les paramètres de requête et de formulaire combinés pour le composant dérivé @query-param. Pour d'autres considérations sur le contexte des composants de message, voir Section 7.4.3.
Un identifiant de composant se compose d'un nom de composant et des paramètres éventuels associés à ce nom. Chaque nom de composant est soit un nom de champ HTTP (Section 2.1), soit un nom de composant dérivé enregistré (Section 2.2). Les paramètres possibles pour un identifiant de composant dépendent de l'identifiant. Le registre « HTTP Signature Component Parameters », qui recense tous les paramètres possibles, est défini à la Section 6.5.
Dans une seule liste de composants couverts, chaque identifiant de composant NE DOIT apparaître qu'une seule fois. Un identifiant de composant est distinct d'un autre si le nom de composant diffère ou si des paramètres diffèrent pour le même nom de composant. Plusieurs identifiants de composant portant le même nom de composant PEUVENT être inclus s'ils ont des paramètres qui les distinguent, tels que foo;bar et foo;baz. L'ordre des paramètres DOIT être préservé lors du traitement d'un identifiant de composant (par exemple lors de l'analyse pendant la vérification), mais l'ordre des paramètres n'est pas significatif pour comparer deux identifiants à égalité. Autrement dit, foo;bar;baz ne peut pas coexister dans un même message avec foo;baz;bar, car ces deux identifiants sont équivalents, mais un système qui traite une forme n'est pas autorisé à la transformer dans l'autre forme.
La valeur de composant associée à un identifiant de composant est définie par l'identifiant lui-même. Les valeurs de composant NE DOIVENT PAS contenir de caractères de saut de ligne (\n). Certains composants de message HTTP peuvent subir des transformations qui modifient la valeur bit à bit sans altérer la signification de la valeur (par exemple lors de la fusion des valeurs de champs). Les valeurs des composants de message doivent donc être canonisées avant signature, afin qu'une signature puisse être vérifiée malgré de telles transformations par les intermédiaires. Ce document définit pour chaque identifiant de composant des règles qui transforment la valeur de composant associée en une forme canonique.
Les sections suivantes définissent les noms d'identifiants de composant, leurs paramètres, leurs valeurs associées et les règles de canonisation pour ces valeurs. La méthode pour combiner les composants de message dans la base de signature est définie à la Section 2.5.