2.2.8. Query Parameters (Query-Parameter)
2.2.8. Query Parameters (Query-Parameter)
Nutzt der Query-Teil der Ziel-URI HTML-Formularparameter im Format aus Abschnitt 5 („application/x-www-form-urlencoded“) von [HTMLURL], erlaubt die abgeleitete Komponente @query-param die Adressierung einzelner Parameter. Die Query-Parameter MÜSSEN gemäß Abschnitt 5.1 („application/x-www-form-urlencoded parsing“) von [HTMLURL] geparst werden; Ergebnis ist eine Liste von Tupeln (nameString, valueString). Der ERFORDERLICHE Parameter name jedes Komponenten-Identifikators enthält den kodierten nameString eines einzelnen Parameters als String. Der Komponentenwert eines benannten Parameters ist der kodierte valueString dieses Parameters. Mehrere benannte Parameter KÖNNEN in den abgedeckten Komponenten vorkommen; die Reihenfolge in den abgedeckten Komponenten ist unabhängig von der Reihenfolge in der Query-Zeichenkette.
Wert des Parameters name und Komponentenwert werden so berechnet:
-
nameString bzw. valueString gemäß Abschnitt 5.1 von [HTMLURL] parsen; Wert nach Dekodierung prozentkodierter Oktette.
-
nameString bzw. valueString mit dem Verfahren „percent-encode after encoding“ aus Abschnitt 5.2 von [HTMLURL] kodieren; Ergebnis ist eine ASCII-Zeichenkette [ASCII].
-
ASCII-Zeichenkette ausgeben.
Der Komponentenwert enthält keine führenden ?, keine = und keine trennenden &. Parameter mit leerem valueString haben den leeren String als Komponentenwert. Einige Parser verwerfen leere Werte inkonsistent.
Ist ein Query-Parameter als abgedeckte Komponente genannt, kommt er aber nicht vor, MUSS dies bei der Signaturbasis-Erzeugung einen Fehler verursachen.
Beispiel:
GET /path?param=value&foo=bar&baz=batman&qux= HTTP/1.1
Host: www.example.com
Für baz, qux und param:
Komponentenwerte (schematisch): _baz_: batman; _qux_: leer; _param_: value.
Signaturbasis mit (SP) für ein Leerzeichen vor dem leeren Wert:
"@query-param";name="baz": batman
"@query-param";name="qux":(SP)
"@query-param";name="param": value
Einschränkungen: Die Algorithmen in Abschnitt 5 von [HTMLURL] unterstützen nur prozent-escaped UTF-8. Andere Kodierungen werden nicht unterstützt. Mehrfaches Vorkommen desselben Parameternamens ist in der Praxis nicht zuverlässig handhabbar. Kommt ein Name mehrfach vor, DARF der benannte Query-Parameter NICHT eingeschlossen werden. Sind mehrfache Parameter in der Anwendung üblich, wird EMPFOHLEN, die gesamte Query mit @query (Abschnitt 2.2.7) zu signieren.
Die Kodierung erlaubt Werte mit Zeilenumbrüchen oder problematischen Zeichen sowie Alternativen wie + für Leerzeichen. Beispiel (Zeilenumbruch gemäß [RFC8792]):
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
Kodierte Werte:
"@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
Ohne Kodierung wären u. a. Zeilenumbrüche im Wert enthalten und die Signaturbasis ungültig.