Aller au contenu principal

2.2.8. Paramètres de requête (Query Parameters)

2.2.8. Paramètres de requête

Si la partie requête de l'URI cible d'une requête utilise des paramètres de formulaire HTML au format défini à la Section 5 (« application/x-www-form-urlencoded ») de [HTMLURL], le composant dérivé @query-param permet de désigner ces paramètres de requête individuels. Les paramètres de requête DOIVENT être analysés conformément à la Section 5.1 (« application/x-www-form-urlencoded parsing ») de [HTMLURL], produisant une liste de couples (nameString, valueString). Le paramètre REQUIS name de chaque identifiant de composant contient le nameString encodé d'un seul paramètre de requête comme valeur String. La valeur de composant d'un paramètre nommé unique est le valueString encodé de ce seul paramètre de requête. Plusieurs paramètres de requête nommés distincts PEUVENT figurer parmi les composants couverts. Les paramètres nommés uniques PEUVENT apparaître dans un ordre quelconque parmi les composants couverts, indépendamment de l'ordre dans la chaîne de requête.

La valeur du paramètre name et la valeur de composant d'un paramètre nommé unique sont calculées par le processus suivant:

  1. Analyser le nameString ou valueString du paramètre de requête nommé défini par la Section 5.1 (« application/x-www-form-urlencoded parsing ») de [HTMLURL]; il s'agit de la valeur après décodage des octets pourcent-encodés.

  2. Encoder le nameString ou valueString selon le processus « percent-encode after encoding » défini par la Section 5.2 (« application/x-www-form-urlencoded serializing ») de [HTMLURL]; cela produit une chaîne ASCII [ASCII].

  3. Produire la chaîne ASCII.

Notez que la valeur de composant n'inclut pas de point d'interrogation (?), signe égal (=) ni esperluettes (&) de séparation en tête. Les paramètres de requête nommés dont le valueString est vide ont une chaîne vide comme valeur de composant. En raison d'incohérences entre implémentations, certaines bibliothèques d'analyse des paramètres de requête suppriment de telles valeurs vides.

Si un paramètre de requête est nommé comme composant couvert mais n'apparaît pas dans les paramètres de requête, cela DOIT provoquer une erreur lors de la génération de la base de signature.

Par exemple, pour la requête suivante:

GET /path?param=value&foo=bar&baz=batman&qux= HTTP/1.1 Host: www.example.com

En indiquant les paramètres de requête nommés baz, qux et param, on obtient les valeurs de composant @query-param suivantes: pour baz, batman; pour qux, une chaîne vide; pour param, value. Les lignes de base de signature correspondantes sont les suivantes, avec (SP) indiquant un seul caractère d'espace en fin avant la valeur de composant vide:

"@query-param";name="baz": batman "@query-param";name="qux":(SP) "@query-param";name="param": value

Ce composant dérivé présente des limites. En particulier, les algorithmes de la Section 5 (« application/x-www-form-urlencoded ») de [HTMLURL] ne prennent en charge que les paramètres de requête utilisant l'encodage UTF-8 avec échappement pourcent. D'autres encodages ne sont pas pris en charge. De plus, plusieurs instances d'un paramètre nommé ne sont pas prises en charge de façon fiable sur le terrain. Si un nom de paramètre apparaît plusieurs fois dans une requête, le paramètre de requête nommé NE DOIT PAS être inclus. Si des paramètres multiples sont courants dans une application, il est RECOMMANDÉ de signer la chaîne de requête entière avec l'identifiant de composant @query défini à la Section 2.2.7.

Le processus d'encodage permet des paramètres de requête dont les valeurs contiennent des sauts de ligne ou d'autres caractères problématiques, ou des encodages alternatifs comme le caractère plus (+) pour représenter les espaces. Pour les paramètres de requête de ce message:

NOTE: retour à la ligne '' selon la RFC 8792

GET /parameters?var=this%20is%20a%20big%0Amultiline%20value&
bar=with+plus+whitespace&fa%C3%A7ade%22%3A%20=something HTTP/1.1 Host: www.example.com Date: Tue, 20 Apr 2021 02:07:56 GMT

Les valeurs résultantes sont encodées ainsi:

"@query-param";name="var": this%20is%20a%20big%0Amultiline%20value "@query-param";name="bar": with%20plus%20whitespace "@query-param";name="fa%C3%A7ade%22%3A%20": something

Sans cet encodage, les valeurs résultantes seraient:

"@query-param";name="var": this is a big multiline value "@query-param";name="bar": with plus whitespace "@query-param";name="façade": ": something

Cette chaîne de base contient des caractères qui violent les contraintes sur les noms et valeurs de composants et est donc invalide.