Wir wollen mit dem WWW-Browser nicht nur Dokumente ansehen können, sondern auch Eingaben durchführen können, die dann von einem Server bearbeitet werden. Dieser Server kann eine Datenbank betreiben und wir geben eine Datenbankabfrage ein, oder der Server führt sonstige Berechnungen durch und sendet uns die Ausgabe.
3.6.1 Technik ohne JAVA:
Man definiert in HTML sogenannte Formulare. Wenn der Anwender die Submit-Schaltfläche anklickt, werden der Text aus den Textfeldern und die Einstellungen der Schaltflächen zum Server zurückgesendet. Auf dem Server wird das Programm (CGI-Skript) gestartet, welches bei Action im FORM-Tag angegeben ist. Der http-Dämon auf dem Server schließt das CGI-Skript an und gibt ihm die entsprechenden Daten. Das CGI-Skript verarbeitet die Formulardaten und sendet eine Antwortseite an den Browser zurück. Deren 1.Zeile muß sein: "Content-type: " Üblicherweise wird das CGI-Skript in Perl (Erweiterung von UNIX-Shell-Script) geschrieben, C oder JAVA ist jedoch genauso möglich.
Antwort= Formular=
seite daten
CGI- Web-Browser Formular
Skript http- des Client
Server
Die Formulardaten könne mit den Methoden GET oder POST gesendet werden. Bei der GET-Methode werden die Eingabedaten alsTeil des URL übergeben, bei der POST-Methode in der Standardeingabe. Der Server sendet kein EOF, daher muss der Programmierer das Ende an Hand der ENVIRONMENT-Variable "CONTENT_LENGTH" ermitteln.
GET-Methode:Der httpd bekommt vom Browser folgende Anforderung: GET scriptname?parameters
Dieser Zeichenkette muss eine Leerzeile folgen.
Bsp.: GET /cgi-bin/priceinfo?Toaster+Herd\\n\\n
Das Skript Priceinfo würde diese Information, gefolgt von dem ? als Befehlszeilenparameter empfangen (argv[0] für Toaster und argv[1] für Herd). Sie können also mehr als eine Anweisung in die Befehlszeile eingeben, getrennt durch "+" .
URL-Kodierung: Alle nicht alphanumerischen Zeichen, ausgenommen "+" und "&" werden durch ein "%"-Zeichen gefolgt von einer zweistelligen Hexadezimalzahl kodiert. Dies verhindert, dass alle Zwischenprogramme durch Eingabe von Zwischenräumen und Sonderzeichen durcheinandergebracht werden. Bsp.: "Mastering C++" wird zu "Mastering+C%2b%2b" weil die Hexadezimalzahl "2b" der ASCII-Code von "+" ist.
In der ENVIRONMENT-Variable "QUERY_STRING" steht der gesamte Eingabestring zur Verfügung. (C-Funktion getenv)
Formulare
Formular
Kontrollkästchen
Textfeld
Passwort
Gruppe von Optionsfeldern
Sende-Schaltfläche
Listenelement
Auswahlliste
Mehrzeiliges Textfeld
CGI-Programme in C
Perl ist zwar die 1. Wahl für CGI-Programme, vieles spricht aber für C. Vorteil 1: sie beherrschen C, aber nicht Perl. Vorteil 2: C ist schneller. Vorteil 3: C als binary ist besser zu schützen.
Die Übergabe von Parametern an CGI-Programme erfolgt entweder über die GET- oder POST-Methode. Die Länge der Parameter ist nicht beschränkt. Da die Übernahme der Parameter vom Browser in C kompliziert ist, gibt es diverse Routinensammlungen, die das Leben erleichtern.
NCSA-Daemon: https://hoohoo.ncsa.uiuc.edu/docs/setup/Compilation.html
cgic: https://www.boutell.com/cgic/
gd: https://www.boutell.com/gd/ Zeichenfunktion zur Erstellung von Grafiken
Übung-html-cgi: Erstellen Sie ein Formular in Ihrem Dokument und ein CGI-Skript in C mit der
GET-Methode.
z.B.: Suchmaschine (Suchbegriff, gesucht wird in Dateien am Server)
Hotel-, Flugzeugreservierung
Bestellung von z.B. CDs (incl. Verwaltung des Bestandes)
Fernwartung des WWW-Servers (ps, df-Kommandoausgabe über CGI schicken)
|