HTML-Formulare und CGI
Formulardaten übertragen mit GET oder POST
Datenstrom bei Übertragung von Formulardaten
Das Hypertext Transfer Protocol (HTTP) ist das Übertragungsprotokoll, mit dem WWW-Browser und WWW-Server Daten austauschen. Dafür gibt es HTTP-Befehle. Zwei HTTP-Befehle sind im Zusammenhang mit der Übertragung von Formulardaten von Bedeutung:
- GET
In einem HTML-Formular erzwingen Sie diesen Befehl durch die Angabe von method=get im einleitenden <form>-Tag. Bei dieser Angabe werden die ausgefüllten Formulardaten zuerst an die Server-Software übertragen und von dieser in einer bestimmten Umgebungsvariablen mit dem Namen QUERY_STRING zwischenspeichert. Ein CGI-Script, das durch die Angabe action= im einleitenden Formular-Tag aufgerufen wird, muß den Inhalt dieser Umgebungsvariablen auslesen, um an die Formulardaten heranzukommen (siehe auch den Abschnitt über Umgebungsvariablen). In Perl ist das beispielsweise mit einer Anweisung wie $form_daten = $ENV{'QUERY_STRING'}; möglich. Wenn ein HTML-Formular die GET-Methode verwendet, wird der Formulardatenstrom, getrennt durch ein Fragezeichen, direkt hinter die URL-Adresse des CGI-Programmaufrufs gehängt. Im WWW-Browser des Anwenders ist dies nach dem Absenden des Formulars in der URL-Zeile sichtbar.
- POST
In einem HTML-Formular erzwingen Sie diesen Befehl durch die Angabe von method=post im einleitenden <form>-Tag. Die Angabe bewirkt, daß die ausgefüllten Formulardaten direkt an die Adresse übertragen werden, die bei action= angegeben ist. Ein CGI-Script, das bei action= aufgerufen wird, muß die Standardeingabe auslesen, um an die Formulardaten heranzukommen. In Perl geht das beispielsweise mit einer Anweisung wie read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});. Beachten Sie dabei, daß das Programm die Umgebungsvariable CONTENT_LENGTH auslesen muß, um zu ermitteln, wie viele Zeichen es von der Standardeingabe lesen soll. Das ist erforderlich, da der übergebene Datenstrom kein Datenendekennzeichen enthält!
Wenn Sie ein vorhandenes CGI-Script einsetzen wollen, müssen Sie wissen, nach welcher der beiden Methoden das betreffende Script die Daten erwartet. Normalerweise ist das vom Autor des CGI-Scripts dokumentiert. Einige Scripts sind auch so intelligent, beide Möglichkeiten abzufragen - in diesem Fall ist es egal, welche Übertragungsmethode Sie im HTML-Formular wählen. Wenn Sie eigene Scripts schreiben, müssen Sie eine Übertragungsmethode festlegen oder ebenfalls so intelligent programmieren, daß es egal ist, welche Methode im HTML-Formular angegeben wird.
Ein typisches HTML-Formular besteht aus benannten Feldern (z.B. für Name, E-Mail-Adresse und Kommentartext). Bei der Übertragung eines ausgefüllten Formulars an den Server-Rechner bzw. ein CGI-Programm müssen die Daten so übertragen werden, daß es dem CGI-Script möglich ist zu erkennen, aus welchen Feldern das Formular besteht, und welche Daten der Anwender in welches Feld eingetragen hat. Deshalb gibt es eine bestimmte Kodierungsmethode, die Formularfelder und deren Daten voneinander trennt. Diese Kodierungsmethode benutzt folgende Regeln:
- Die einzelnen Formularelemente inclusive ihrer Daten werden durch ein kaufmännisches & voneinander getrennt.
- Name und Daten eines Formularelements werden durch ein Istgleichzeichen = voneinander getrennt.
- Leerzeichen in den eingegebenen Daten (z.B. bei mehreren Wörtern) werden durch ein Pluszeichen + ersetzt.
- Alle Zeichen mit den ASCII-Werden 128 bis 255 (hexadezimal 80 bis FF) werden durch eine Hexadezimalzeichenfolge umschrieben, eingeleitet durch ein Prozentzeichen % und dahinter der Hexadezimalwert des Zeichens (z.B. wird der deutsche Umlaut ö durch %F6 umschrieben.
- Alle Zeichen, die in diesen Regeln als Steuerzeichen vorkommen (also &, +, = und %) werden ebenfalls hexadezimal umschrieben, und zwar genau so wie höherwertige ASCII-Zeichen.
Das folgende Beispiel zeigt zunächst den HTML-Quelltext eines HTML-Formulars und darunter ein Bild, wie das Formular im WWW-Browser mit Anwendereingaben aussieht. Unterhalb des Bildes sehen Sie, wie der Formulardatenstrom entsprechend der Kodierungsregeln aussieht, nachdem der Anwender das Formular absendet.
Beispiel: HTML-Formular (HTML-Quelltext)
<form action="/cgi-bin/comments.pl" method=post>
<pre>
Name: <input name="AnwenderName" size=40>
E-Mail: <input name="AnwenderMail" size=40>
Text: <textarea rows=5 cols=34></textarea>
<input type=submit value="Formulardaten absenden">
</pre>
</form>
|
Beispiel: Abbildung des HTML-Formulars im WWW-Browser mit Anwendereingaben
Beispiel: Formulardatenstrom aufgrund dieser Formulareingaben
AnwenderName=Stefan+M%FCnz&AnwenderMail=s.muenz@euromail.com&Text=Das+ist+ein+kleiner+Text
|
So kodiert der WWW-Browser die Formulardaten beim Absenden des Formulars. Diese Zeichenkette wird mit einer der erlaubten Methoden POST oder GET an das aufgerufene CGI-Script übergeben. Das CGI-Script kann diesen Datenstrom in Kenntnis der Kodierungsregeln auseinanderdividieren, um die Formulardaten beispielsweise feldweise zu verarbeiten.
Es gibt auch einen eigenen Mime-Type für dieses Kodierungs-Schema: den Mime-Type application/x-www-form-urlencoded.
© 1997 Stefan Münz, s.muenz@euromail.com