Query String

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Ein Query String (engl. „Abfrage-Zeichenkette“) ist ein Teil einer URL im World Wide Web. Diese Zeichenkette enthält benannte Parameter, die dann von der Webanwendung ausgewertet werden können.

Aufbau[Bearbeiten]

Diese URL enthält einen Query String: http://www.example.org/suche?stichwort=wiki&ausgabe=liste Der Query String dieses Beispiels lautet stichwort=wiki&ausgabe=liste, der Parameter stichwort enthält den Wert „wiki“ und ausgabe enthält den Wert „liste“. Innerhalb des Query Strings werden die Parameter-Werte-Paare (auch: Key-Value Pairs) mit einem kaufmännischen &-Zeichen getrennt. Die Paare selbst werden durch ein Gleichheitszeichen dissoziiert.

Übertragung[Bearbeiten]

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[Bearbeiten]

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)[Bearbeiten]

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[Bearbeiten]

Kodierung[Bearbeiten]

Hauptartikel: URL-Encoding

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[Bearbeiten]

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[Bearbeiten]

Da der Query-String Teil der URL ist, ist er für jeden Internetnutzer im Browser einseh- 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[Bearbeiten]

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 seit HTML 4 nicht mehr vorhanden.

Siehe auch[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. W3C-Empfehlung für das Trennen der Key-Value-Pairs
  2. HTTP/1.1-Spezifikation
  3. http://support.microsoft.com/kb/208427
  4. HTML 3-Spezifikation