Variablen in Webseiten

Besonders bei der Verwendung von Programmiersprachen in ganzen Websites, also mehreren Webseiten, stellt sich manchmal die Frage: "Wie können Daten von einer Webseite an eine andere übergeben werden?" Dies kann beispielsweise interessant sein beim Abschicken eines HTML-Formulars, beim Anmelden eines Benutzers (Übergabe des Usernamen) o. ä.

Im HTTP (Hypertext Transfer Protocol) können mehrere Methoden unterschieden werden, wie ein Client eine HTML-Seite vom Server anfordert. Die wichtigsten Methoden in diesem Zusammenhang sind GET (für einen "normalen" Seitenaufruf) und POST (zum Senden von Formulardaten an den Server). Bei beiden Methoden wird eine URL aufgerufen, welche eventuell gesendete Daten verarbeitet und HTML-Code zurückschickt. Hier sollen beide Methoden vorgestellt und im Anschluss Vor- und Nachteile aufgezeigt werden.

Die GET-Methode

Mit einem GET-Request sendet der Client eine Anforderung einer (durch die URL, also die Adresse und den Namen) bestimmten Webseite. Jeder "normale" Seitenaufruf - durch Eingabe in die Adresszeile des Browsers oder durch Anklicken eines Links - erfolgt also über einen GET-Request. Wenn mit dieser Anforderung Daten an den Server übermittelt werden sollen, so müssen diese mit der URL übergeben werden, wie auch im Modul Syntax einer URL beschrieben.

Das HTTP-Protokoll sieht keine Beschränkung für die Länge einer URL vor. Praktisch soll eine URL aber nicht länger als 255 Zeichen sein, da manche ältere Browser oder auch Proxies (zwischengeschaltete Server) keine längeren Zeichenketten verarbeiten können. Alles, was darüber hinausgeht, könnte somit abgeschnitten werden.

Aufbau der Übergabe

Sollen Variablen über die URL weitergegeben werden, so gibt es mehrere Möglichkeiten:

  1. Das HTML-Dokument enthält einen Link, bei dem an die URL bereits eine Parameterliste angefügt wurde.
  2. Der Benutzer gibt die URL händisch in die Adresszeile seines Browsers ein und fügt hier gleich eine Parameterliste an (eher nicht so relevant).
  3. Ein Formular wird mit method="GET" abgeschickt. Dann wird die Parameterliste automatisch an die URL drangehängt.
  4. Der Seitenaufruf erfolgt mittels JavaScript. Dann wird auch mittels JavaScript die Parameterliste an die URL angefügt.

Eine URL samt Parameterliste hat beispielsweise folgendes Aussehen:

http://www.adobe.de/main.html?c=at&l=de (vgl. Modul Syntax einer URL)

Die Parameterliste beginnt mit einem Fragezeichen und enthält beliebig viele Zuweisungen Variable=Wert (Achtung: keine Leerzeichen!), die durch ein &-Zeichen getrennt sind.

Auslesen der Variablen

Der Server zerlegt die URL und speichert die Parameterliste in einer Umgebungsvariablen namens QUERY_STRING, die von einem serverseitigen Script (je nach Scriptsprache etwas anders) ausgelesen und verarbeitet werden kann. Aber auch ein clientseitiges Script der aufgerufenen Seite kann die übergebenen Variablen verwenden. Dort ist zwar die (Server-)Variable QUERY_STRING unbekannt, jedoch kann die Zeichenkette der URL anhand der Zeichen ?, = und & zerlegt werden, und die erkannten Variablen können auch z. B. in JavaScript verwendet werden.

Die POST-Methode

Die andere Möglichkeit, Daten an den Server und damit an andere Webseiten zu übergeben, ist die POST-Methode. Dabei werden Formulardaten innerhalb des HTTP-Protokolls, d. h. unsichtbar für den Benutzer übertragen. Mit einem HTTP-Request wird nämlich nicht nur die URL übertragen, sondern auch andere Daten wie Datum und Uhrzeit, verwendeter Browser, oder eben Formulardaten. Die übergebene URL bezieht sich meist auf ein Script, welches die übertragenen Daten verarbeiten soll und ev. eine Rückmeldung an den Browser liefern.

Aufbau der Übergabe

Üblicherweise werden Variable, welche mit POST an den Server geschickt werden, direkt aus einem Formular generiert. Allerdings können Formulardaten auch durch JavaScript verändert und so für die Übertragung "vorbereitet" werden.

Auslesen der Variablen

Die übertragenen Daten müssen aus dem Standardinput (STDIN) des Webservers ausgelesen werden. Dort stehen Sie in derselben Formatierung wie bei der GET-Methode zur Verfügung und müssen zuerst wieder zerlegt werden. Da der Standardinput kein Zeichen enthält, welcher das Ende des Datenstroms kennzeichnet, muss zu diesem Zweck die Anzahl der einzulesenden Zeichen aus der Standardeingabe mit Hilfe der Umgebungsvariablen CONTENT_LENGTH abgefragt werden.

Gegenüberstellung von GET und POST

Die Methode GET hat den Vorteil, auch ausserhalb von Formularen eingesetzt werden zu können. Jedoch liegen die Nachteile auf der Hand:

  • Die Länge der URL ist beschränkt. Die Übergabe von Textbereichen aus einem Formular kann da rasch an diese Grenzen stoßen.
  • Alle übergebenen Parameter sind offensichtlich. Die Übergabe von Passwörtern ist also nicht sinnvoll!
  • Werte von Parametern dürfen bestimmte Sonderzeichen nicht beinhalten (z. B. Leerzeichen, ?, =, &, Klammern, # etc.). Diese müssen vor der Übergabe immer überprüft und durch Ersatzsequenzen (%-Zeichen plus ASCII-Code des gewünschten Zeichens) oder das "+" für ein Leerzeichen ersetzt werden.
  • Die Tatsache, dass die Parameter auch über die Adresszeile direkt vom Benutzer eingegeben werden können, stellen eine Sicherheitslücke dar, die u. U. von Hackern ausgenützt werden könnte.

Wenn möglich, sollte also der Methode POST der Vorzug gegeben werden.

Module, die für die Durchführung vorausgesetzt werden