- Query String
-
Ein Query String ist ein Teil eines Uniform Resource Locator (URL) im World Wide Web. Diese Zeichenkette enthält benannte Parameter, die dann von der Webanwendung ausgewertet werden können.
Inhaltsverzeichnis
Aufbau
Diese URL enthält einen Query String:
http://www.example.org/suche?stichwort=wiki&ausgabe=liste
Der Query String dieses Beispiels lautetstichwort=wiki&ausgabe=liste
, der Parameter stichwort enthält den Wert "wiki" und ausgabe enthält den Wert "liste". Innerhalb des Query Strings werden die Paramter-Werte-Paare (auch: Key-Value Pairs) mit einem kaufmännischen &-Zeichen getrennt. Die Paare selbst werden durch ein Gleichheitszeichen dissoziiert.Übertragung
Die Übergabe der Parameter erfolgt über das HTTP-GET-Verfahren. So bildet sich beispielsweise ein Query String aus Parameter-Werte-Paaren, wenn ein Webformular abgesendet wurde, das als Übertragung "GET" benutzt. Ein anderes Verfahren zur Übertragung ist HTTP-POST, die Wertepaare sind in diesem Fall dann nicht Teil der URL bzw. des Query Strings.
Beispiel
Ein Webformular ist wie folgt konzipiert:
<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="2011-09-07" /> <input type="submit" value="Suche starten" /> </form>
Zu beachten ist hierbei das hidden-Feld. Es ist für den Benutzer nicht sichtbar, wird beim Absenden des Formulares aber dennoch Teil des Query Strings. Der Submit-Button wird dagegen nicht Teil des Query Strings, da diesem keine Bezeichnung (name) zugewiesen wurde. Gibt der Benutzer in das Textfeld "wiki" ein und sendet das Formular ab, entsteht dieser Query String:
http://server/suche.php?stichwort=wiki&suchdatum=2011-09-07
Auswertung (PHP)
In PHP lässt sich dieser 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 also
Array ( [stichwort] => wiki [suchdatum] => 2011-09-07 )
Nachteile und Probleme
Kodierung
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 Parameter-Werte-Trenner erkannt. Beim Generieren des Query Strings müssen diese Zeichen speziell codiert werden - das Leerzeichen würde dann in ein Pluszeichen (+) gewandelt werden.
Wertepaartrenner
Das Et-Zeichen als Parameter-Werte-Paar-Trenner ist in HTML-Dokumenten problematisch, da dieses Zeichen laut dem W3C speziell kodiert sein muss. Der W3C empfiehlt daher eine Trennung der Paare durch ein Semikolon [1]
Sicherheitsrisiken
Da der Query String Teil der URL ist, ist dieser auch für jeden Internetnutzer im Browser einsehbar und auch modifizierbar. Der Entwickler der Applikation sollte also nur ungefährliche Parameter in dem Query String verarbeiten, etwa die Eingabe in einem Suchfeld.
Technische Beschränkungen
Müssen größere Daten übergeben werden, empfiehlt sich diese via POST zu senden, da für das GET-Verfahren einige Beschränkungen gelten:
- Die HTTP-Spezifikation empfiehlt aus Kompatibilitätsgründen eine Maximalgröße von 255 bytes der URLs bzw. URIs[2].
- Der Internet Explorer unterstützt keine URLs, die aus mehr als 2048 Zeichen bestehen[3]
- Webserver können die Maximallänge eines Query Strings selbst begrenzen. Bei einer Überschreitung dieser Grenze sendet der Server dann den Statuscode 414.
- Die (mittlerweile veraltete) HTML 3-Spezifikation schreibt eine Maximallänge von Linkzielen von 1024 Zeichen vor[4]. Diese Beschränkung ist in HTML 4 und HTML 5 nicht mehr vorhanden.
Siehe auch
Einzelnachweise
Wikimedia Foundation.