Query-String
Die Query-Komponente, häufig auch Query-String (englisch für Abfrage-Zeichenkette), ist Teil eines Uniform Resource Locators (URL) im World Wide Web und in RFC 3986 spezifiziert.[1] Die Query-Komponente enthält Daten, häufig in Form von benannten Parametern, die an einen Webserver gesendet und vom nachgeschalteten Server-Teil einer Webanwendung ausgewertet werden können.
Aufbau
[Bearbeiten | Quelltext bearbeiten]Ein Query-String wird mit einem Fragezeichen (?
) eingeleitet und endet mit einem Rautezeichen (#
) oder dem Ende des URLs. Er besteht oft aus einem oder mehreren Parametern, häufig in Form von Schlüssel-Wert-Paaren, die oft mit einem Et-Zeichen (&
) voneinander getrennt werden. Parametername und -wert werden durch ein reserviertes Zeichen, meist ein Gleichheitszeichen (=
), getrennt. Die genannten Trennzeichen entsprechen der Vorgabe des World Wide Web Consortiums (W3C) für die Übertragung von HTML-Formular-Daten.[2]
Der folgende URL enthält den Query-String stichwort=wiki&ausgabe=liste
:
http://www.example.org/suche?stichwort=wiki&ausgabe=liste
Dabei ist dem Parameter stichwort
der Wert wiki
und dem Parameter ausgabe
der Wert liste
zugeordnet.
Beispiel
[Bearbeiten | Quelltext bearbeiten]Ein Webformular ist folgendermaßen implementiert:
<form action="suche.php" method="get">
<label for="stichwort">Suche nach</label>
<input type="text" name="stichwort" id="stichwort" />
<input type="hidden" name="suchdatum" value="2024-11-28" />
<input type="submit" value="Suche starten" />
</form>
Zu beachten ist dabei das verborgene (type="hidden"
) Feld suchdatum
. Es ist im Browser nicht sichtbar, wird beim Absenden des Formulars aber dennoch Teil des Query-Strings. Die Submit-Schaltfläche wird hingegen nicht in den Query-String aufgenommen, da für diese keine Bezeichnung (name
) vergeben wurde. Gibt der Benutzer in das Textfeld das Stichwort „wiki“ ein und sendet das Formular ab, wird beispielsweise folgender URL mit dem entsprechenden Query-String stichwort=wiki&suchdatum=2024-11-28
generiert:
http://<server>/suche.php?stichwort=wiki&suchdatum=2024-11-28
Auswertung (in PHP)
[Bearbeiten | Quelltext bearbeiten]In PHP lässt sich der Query-String abfragen. Dabei ist der Inhalt des Query-Strings als Array verfügbar.
echo $_GET['stichwort'];
gibt beispielsweise den Text aus, der in das Suchfeld eingetragen wurde.
print_r($_GET);
ergibt mit dem Beispiel von oben
Array ( [stichwort] => wiki [suchdatum] => 2024-11-28 )
Nachteile und Probleme
[Bearbeiten | Quelltext bearbeiten]Kodierung
[Bearbeiten | Quelltext bearbeiten]Einige Zeichen dürfen nicht in einem Query-String auftreten, da diese ansonsten fehlerhaft interpretiert werden können. Wird das Gleichheitszeichen beispielsweise innerhalb eines Wertes benutzt, wird dieses fälschlicherweise als Schlüssel-Wert-Trennzeichen erkannt. Beim Generieren des Query-Strings müssen diese Zeichen speziell codiert werden – beispielsweise müsste ein Leerzeichen in ein Pluszeichen (+
) umgewandelt werden.
Trennzeichen für Parameter
[Bearbeiten | Quelltext bearbeiten]Das Et-Zeichen (&
) als Trennzeichen von Schlüssel-Wert-Paaren ist innerhalb von HTML-Dokumenten problematisch, da dieses Zeichen laut dem World Wide Web Consortium (W3C) speziell kodiert sein muss. Das W3C empfiehlt daher eine Trennung der Paare durch ein Semikolon (;
).[3]
Sicherheitsrisiken
[Bearbeiten | Quelltext bearbeiten]Da der Query-String Teil des URLs ist, ist er für jeden Internetnutzer im Browser einseh- und auch modifizierbar. In einer Webanwendung sollten demnach nur unkritische Parameter in den Query-String eingefügt werden, etwa die Eingabe in einem Suchfeld.
Technische Beschränkungen
[Bearbeiten | Quelltext bearbeiten]Muss eine größere Menge von Daten übergeben werden, empfiehlt es sich diese nicht über den URL, sondern im Message Body mittels der HTTP-Methode POST zu übermitteln, da für URLs einige Beschränkungen gelten:
- Die HTTP-Spezifikation empfiehlt aus Kompatibilitätsgründen eine Maximalgröße von 255 Bytes für URLs bzw. URIs.[4]
- Der Internet Explorer unterstützt keine URLs, die aus mehr als 2083 Zeichen bestehen.[5]
- Webserver können die Maximallänge eines Query-Strings selbst begrenzen. Bei einer Überschreitung dieser Grenze sendet der Server den HTTP-Statuscode 414 an den Client zurück.
- Die (mittlerweile veraltete) HTML-3-Spezifikation schreibt eine Maximallänge von Linkzielen von 1024 Zeichen vor.[6] Diese Beschränkung ist seit HTML 4 nicht mehr vorhanden.
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ T. Berners-Lee, R. Fielding, L. Masinter: RFC – Uniform Resource Identifier (URI): Generic Syntax [Errata: RFC 3986]. Januar 2005, Abschnitt 3.4: Query. – Standard: [66] (löst ab, aktualisiert durch , englisch).
- ↑ 17 Forms. 17.13.4 Form content types. In: HTML 4.01 Specification. World Wide Web Consortium (W3C), 27. März 2018, abgerufen am 27. November 2019 (englisch).
- ↑ W3C-Empfehlung für das Trennen der Key-Value-Pairs
- ↑ RFC – HTTP/1.1. Abschnitt 3 (englisch).
- ↑ support.microsoft.com
- ↑ HTML 3-Spezifikation