Deutsch English
Blog
Home
Über tdbengine
Newsletter
Download
Helpware
Chat
Dokumentation
Einführungskurs
Grundlagen
Programmierumgebung
CGI Aufbereitung
EASY Programmierung
Standard-Bibliothek
Die Datenbank
HTML-Formulare
Befehlsreferenz
HOWTO - Wie kann ich...?
Projekte
Links
Benchmarks
Bug Reporting
Supportanfrage
 
Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
Lektion 1: Grundlagen / Was ist CGI?
Client Side - Server Side
Immer dann, wenn Funktionen benötigt werden, die über den HTML-Standard hinausgehen, wird zusätzliche Programmkapazität benötigt. Dabei ist zunächts einmal zu unterscheiden, wo das Programm ausgeführt wird.

 Läuft das Programm auf der Klienten-Seite (also auf dem Gast-Rechner), so muß der entsprechende Programmcode in das HTML-Dokument eingebunden sein. Beispiele hierfür sind Javascript, Java-Applets und ActiveX-Komponenten. Aus Sicherheitsaspekten sind jedoch die Möglichkeiten dieser Programme sehr stark eingeschränkt. Sie laufen in einer völlig abgekapselten Umgebung (Beispiel: Java-Sandbox) und dürfen keine Systemfunktionen ausführen, wie etwa Anlegen oder Löschen von Dateien. Die einzigen Informationen, auf die ein eingebettetes Programm zugreifen darf, sind die Elemente des (einbettenden) HTML-Dokuments.

  

Beispiel: Ein Shopping-System, das auf Java-Applets basiert, muss mit dem äusseren HTML-Dokument den gesamten Warenbestand zum Klienten übertragen. Zudem muss ein eingebettetes Programm in plattformübergreifender Form präsentiert werden, damit die Anwendung nicht auf einzelne Betriebssysteme (und/oder CPUs) beschränkt bleibt. Unter diesem Gesichtspunkt bleiben nur noch Javascript und Java übrig: Im Fall von Javascript wird der Quelltext des Programms übertragen, bei Java ist es ein portierbarer Pseudo-Code (Byte-Code). In jedem Fall muß ein weiteres Programm auf der Klientenseite den Code erst interpretieren und dann ausführen.
Das Ganze kann freilich nur dann im gewünschten Maße funktionieren, wenn die Interpreter verschiedener Klienten gleiche (oder wenigstens sehr ähnliche) Ergebnisse liefern. Leider ist es derzeit nicht so. Trotz alledem sind Klienten-Programme prinzipiell verführerisch, da damit die Ressourcen im Netz wesentlich besser ausgenützt werden können.

Programme, die auf dem Server laufen, sind keinen solchen Beschränkungen unterworfen. Hier stellt sich die Sicherheitsfrage prinzipiell anders. Auf hierzu relevante Fragen gibt ein Anschlußkurs Auskunft. Server-Programme können demnach (in einem genau definierten Rahmen) auf vielfältige Systemressourcen zugreifen:

  • Datenbanken
  • Dateien
  • Kommunikationsmittel (wie E-Mail-Versand)
  • Weitere Programme

Zudem kann das Programm in jeder Form vorliegen, die der Server ausführen kann. Es besteht demnach keine Notwendigkeit, den Code portierbar zu machen, sondern der Programmierer kann sozusagen den Rechner komplett ausreizen. Auch spielt die Programmiersprache, in der die Programme geschrieben werden, keine Rolle.
Der Grund, weshalb in der Literatur immer von CGI-Scripten gesprochen wird, liegt allein daran, daß ursprünglich die meisten CGI-Programme eben in einer Scriptsprache wie Perl geschrieben wurden. Als Script-Sprachen werden solche Programmiersprachen bezeichnet, bei denen der Quelltext immer erst zur Laufzeit analysiert, interpretiert und schließlich ausgeführt wird.

Probleme bekommen Server-Programme immer dann, wenn viele Anfragen beantwortet werden müssen, da ja (meist) nur ein Rechner zur Verfügung steht, dessen Kapazität auf die eingegangenen Anfragen verteilt werden muß. Zudem muss die Ausgabe jedes Programms zum Klienten übertragen werden, wodurch eine nicht unerhebliche Netzbelastung entstehen kann.

Hier noch einmal kurz Besonderheiten, sowie Vor- und Nachteile von Klienten- und Server-Programmen:

Klienten-Programme:

Vorteile
: Das Programm kann (in einem eingeschränkten Maße) die Ressouren des Gastrechners benutzen, wodurch der Server entlastet wird. Das kann bei rechenintensiven Programmen ein Vorteil sein. Zudem können beispielsweise Grafik- und Soundfunktionen des Gastrechners besser ausgenutzt werden. Zur Interaktion mit dem Anwender sind keine zusätzlichen Übertragungen nötig (Beispiel: Fehleingaben können direkt beim Klienten angemahnt und korrigiert werden)

Nachteile
: Alle benötigten Informationen (inklusive dem Programm selbst) müssen erst einmal übertragen werden. Das Programm darf keine Dateien anlegen und hat somit keinen permanenten Speicher, also kein "Gedächtnis". Datenbankabfragen sind immer mit weiteren Übertragungen von einem Server-Programm verbunden. Die Programm-Interpreter sind teilweise inkompatibel.

Einsatzgebiete: Derzeit werden Klienten-Programme vorwiegend zur grafischen Gestaltung eingesetzt (OnMouseOver...), in manchen Fällen werden auch schon Formulare voraufbereitet. Es ist jedoch durchaus möglich (und auch erstrebenswert), wirklich funkionale GUIs (grafische Benutzerschnittstellen) zu schaffen, über die dann auf Serverprogramme zugegriffen werden kann. (Leider ist die Java-Programmierung nicht so einfach wie HTML-Design)

Server-Programme:

Vorteile: Das Programm kann auf Datenbanken zugreifen, Dateien lesen und schreiben. Es läuft in einer definierten Umgebung, unterschiedliche Klienten-Umgebungen spielen keine Rolle. Es liefert seine Ergebisse an alle Klienten, die HTML verarbeiten können, vom Großrechner über sämtliche PC's bis hin zum WAP-Handy. Die Resssourcen des (Wirt-)Rechners können hocheffizient genutzt werden.

Nachteile: Die Resourcen des Wirt-Rechners sind beschränkt (auch wenn es sich um ein noch so leistungsfähiges System handelt), weshalb es bei vielen gleichzeitigen Anfragen zu Performance-Einbrüchen kommen kann. Der Dialog mit dem Klienten erfordert immer Informationsübertragungen und belastet dadurch das Netz (vor allem, wenn die Antworten "grafisch gut aufgemacht" sein sollen).

Einsatzgebiete: Alle Programme, die auf Datenbanken oder sonstige zentral gehaltene Datenbestände zugreifen müssen.

Was ist CGI?
CGI steht für Common Gateway Interfaceund definiert einen Standard zum Informationsaustausch zwischen einer Anfrage (Request) und der diese Anfrage bearbeitenden Applikation, wobei sich beide Seiten des http-Protokolls (http = hypertext tranfer protocol) bedienen.

Im Normalfall gestaltet sich der Infomationsfluss so: Der Klient setzt mit einem http-Browser (Netscape Navgator, Microsoft Internet Explorer) eine Anfrage in Form eines Dateinamens an den http-Server ab. In den meisten Fällen handelt es sich dabei um eine HTML-Seite, die der http-Server direkt an den Klienten senden kann.
Durch bestimmte Auszeichnungen der Anfrage erkennt der http-Server jedoch, daß er die Anfrage an ein anderes Programm weiterleiten muß. Diese Auszeichnungen sind normalerweise direkt aus der Adressierung der Anfrage (also dem Dateinamen bzw. dem kompletten Pfad zu diesem Datenamen) zu erkennen:
Aus einer Adresse wie http://www.tdb-engine.de/demos/hello.pl werden die einzelnen Komponenten extrahiert:

http das Protokoll (und damit der entsprechende http-Server
//www.tdb-engine.de der zu dieser Domain (IP-Adresse) gehörende Netzwerk-Server
/demos/ der (virtuelle) Pfad auf dem Server zur gewünschten Datei
hello.pl die gewünschte Datei

Die Programmklasse der Anfrage bestimmt der http-Server nun a) aus der Namenserweiterung der gewünschten Datei

Beispiele:  

                                               
 .pl  Perl-Programme 
 .prg  tdbengine-Programme 
 .cgi  Unix-Shell-Skripten 

b) durch das Verzeichnis, in dem sich die gewünschte Datei befindet

Beispiele:  

                                               
 /cgi-bin/  Standard-CGI-Verzeichnis auf Unix/Linux-Rechnern 
 /scripts/  Standard-CGI-Verzeichnis bei Windows NT 
 /cgi-tdb/  beliebtes Verzeichnis für tdbengine-Programme 

Welche Dateianfrage der http-Server als externen Programmaufruf erkennt und welche nicht, wird in der jeweiligen Server-Konfiguration festgelegt.

       Statische und dynamische Anfragen http-Anfragen, die der http-Server unmittelbar, also ohne auf weitere Programm-Ressourcen zuzugreifen, beantworten kann, indem er einfach die angeforderten Dateien an den Klienten überträgt, werden als statische Anfragen bezeichnet.

Es handelt sich dabei vorwiegend um

HTML-Dokumente .htm, .html
Text-Dokumente .txt
Bilder .gif, .jpg, .jepg
Sounds .mp3, .wav, .au

Anfragen, die nur unter Mithilfe weitere Programme beantwortet werden können, werden als dynamische Anfragen bezeichnet. Hierzu zählen unter anderem

CGI-Programme (siehe oben)
ISAPI-Anwendungen .isa (werden hier nicht behandelt)
NSAPI-Anwendungen .nsa (werden hier nicht behandelt)

Es existiert bei allen gängigen http-Servern noch eine Mischform, bei der in statische HTML-Dokumente dynamische Inhalte eingebettet sind. Es handelt sich bei diesen Einbettungen um sogenannte "server side includes", die äußeren HTML-Dokumente erkennt man an Namenswerweiterungen wie .shtm oder .shtml. Server side includes sind nicht Thema dieses Einführungskurses.

So werden die Daten übertragen
In jedem Fall nimmt erst einmal der http-Server die Anfrage entgegen. Erkennt er darin den Aufruf eines CGI-Programms, so richtet er eine sogenannte Programmumgebung (Environment) ein. Diese besteht aus
  • einem Satz von Environment-Variablen
  • einem Satz von Ein- und Ausgabekanälen

Environment-Variablen sind nicht anderes als über festgelegte Namen ansprechbare Zeichenketten. Auch die Shell (Kommandoprozessor) hat einen Satz von Environment-Variablen, den man sich mit dem Befehl "set" ansehen kann. Wechseln Sie hierfür auf ein Terminal (MS-DOS-Eingabeaufforderung unter Windows) und geben Sie dort folgendes ein:

set [RETURN]

Sie erhalten eine Auflistung aller Environment-Variablen Ihrer Shell (hier nur ein Beispiel):
 

  
TMP=C:\WINDOWS\TEMP
TEMP=C:\WINDOWS\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
COMSPEC=C:\WINDOWS\COMMAND.COM
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\PP\BIN\GO32V2
windir=C:\WINDOWS
BLASTER=A220 I5 D1 T4
...

Oder unter Linux 

  
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="03" [2]="0" [3]="1" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='2.03.0(1)-release'
COLORTERM=1
COLUMNS=80
ENLIGHTENMENT_ROOT=/usr/X11R6/lib/X11/enlightenment
EUID=0
GNOMEDIR=/opt/gnome
GS_FONTPATH=/usr/share/lilypond/afm:/usr/share/lilypond/pfa
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/tdbengine
HOSTNAME=uli
HOSTTYPE=i686
...

Da Programme solche Envionment-Variablen sowohl lesen als auch setzen können, sind sie sehr beliebt bei der Informationsübertragung von einem Programm zu einem weiteren (ähnlich der bei vielen Anwendern beliebten "Zwischenablage").

Der http-Server richtet also einen Satz von Environment-Variablen ein, wobei vor allem die vom Klienten übertragenen Informationen brücksichtigt werden. Zusätzlich teilt der http-Server über die Environment-Variablen auch seine Eigenschaften an das aufzurufende Programm mit.

Die CGI-Envionment-Variablen
Hinweis: Sie müssen die folgende Aufzählung nicht im verinnerlichen, denn einerseits bereitet die tdbengine die wichtigsten für Sie vollständig auf, und andererseits können die Variablen bei Bedarf jederzeit auch online eingesehen werden.
Laut CGI-Spezifikation müssen mindestens folgende Environment-Variablen angelegt werden:

Server-spezifische Umgebungsvariablen


GATEWAY_INTERFACE
In dieser Umgebungsvariablen steht die Revision der CGI-Spezifikation, die dieser Server unterstützt.
Format: CGI/<revision>

SERVER_NAME
Der Name des Rechners (der Maschine), auf dem die Server-Software läuft, steht in der Variablen SERVER_NAME.
Die Angabe erfolgt als Hostname des Servers, als DNS-Alias oder als IP-Adresse. Beispiel: www.cs.tu-berlin.de

SERVER_SOFTWARE
Diese Variable enthält Name und Version des WWW-Servers, der die Ausführung des CGI-Skripts veranlaßt hat.
Format: <name>/<version>

DOCUMENT_ROOT
Diese Variable enthält den Pfadnamen des Dokumentenverzeichnisses des WWW-Servers, wie er auch in der Server-Konfigurationsdatei spezifiziert wurde.
Beispiel: /usr/local/www/doc

Anfrage-spezifische Umgebungsvariablen
Die Werte der Umgebungsvariablen in diesem Abschnitt sind anfrage-spezifisch. Sie werden also in Abhängigkeit von der, an den Server gerichteten, Anfrage gesetzt.

AUTH_TYPE
Bei geschützten Skripten informiert diese Variable über die zu verwendende Authentifizierungsmethode.
Beispiel: Basic

CONTENT_LENGTH
Bei METHOD="PUT" oder "POST" steht in CONTENT_LENGTH die Länge der auf der Standardeingabe verfügbaren Daten in Bytes, laut Angabe des Clients.
Bei METHOD="GET" ist CONTENT_LENGTH leer.

CONTENT_TYPE
Bei Requests, die dem Server Daten übermitteln, wie etwa die HTTP-Anforderungen PUT oder POST, enthält diese Variable Angaben über den Typ dieser Daten (MIME-Type).
Beispiel (Online-Formular): application/x-www-form-urlencoded HTTP_ACCEPT In dieser Variablen steht eine Liste mit den MIME-Content-Types, die der Client versteht - so wie sie im HTTP-Header angegeben wurden.
Die einzelnen Listenelemente sind durch Kommata getrennt. Format: /, /, ...

HTTP_FROM
In dieser Variablen steht die EMail-Adresse des Benutzers, der den Request ausgelöst hat. Nicht alle Browser unterstützen die Übermittlung der User-EMail-Adresse.

HTTP_REFERER
In dieser Variablen steht der URL desjenigen Dokuments, das der Client angefordert hatte bevor er das CGI-Skript referenziert hat.

HTTP_USER_AGENT
Diese Variable gibt Auskunft darüber, mit welcher Client-Software (Netscape, Mosaic, ...) der Request auf dieses CGI-Skript ausgelöst wurde.
Beispiel: Mozilla/2.0 (Win16; I)

PATH_INFO
Es gibt mehrere Möglichkeiten, beim Aufruf eines CGI-Skripts gleichzeitig Parameter an das Skript übergeben zu können.
Eine davon ist das Anhängen dieser Informationen an den das Skript referenzierenden URL (getrennt durch '/').
Diese Informationen (inklusive führendem '/') stehen dann in der Umgebungsvariablen PATH_INFO.
Leider ist diese Methode der Parameterübergabe die unsicherste und unsauberste. Diese Variable war ursprünglich dazu gedacht, einen im Anschluß an den virtuellen CGI-Skript-Pfad stehenden Dateinamen zu übernehmen. Der Zugriff auf ein CGI-Skript erfolgt über einen virtuellen Pfadnamen (z.B.: '/CGI/'). Wird eine Skript-Datei nun mit dem URL 'http:/<server>/CGI/datei' referenziert, dann enthält PATH_INFO den Wert '/datei'. Dieser Wert wird aber URL-kodiert, was bedeutet, daß alle Sonderzeichen, die in einem URL vorhanden sein können, 'verschlüsselt' werden. Beispielsweise ersetzt ein +-Zeichen im URL das dort verbotene Leerzeichen, und folglich werden Leerzeichen in den Parametern in Pluszeichen umkodiert, so daß es keine Möglichkeit mehr gibt, zwischen echten +-Zeichen und dem '+' als Leerzeichenersatz zu unterscheiden.
Die Parameterübergabe mittels PATH_INFO sollte also vermieden werden, zumal es mit der Parameterübergabe in der Umgebungsvariablen QUERY_STRING eine wesentlich komfortablere Methode gibt.

PATH_TRANSLATED
Wie eben schon erwähnt, wurde bei der Spezifikation der Variablen PATH_INFO vor allem daran gedacht, Dateinamen in dieser Variablen zu übergeben. Diese Dateinamen nützen aber wenig, wenn nicht gleichzeitig die Stelle im Filesystem, an der diese Datei liegt, übergeben wird. Diese Aufgabe sollte PATH_TRANSLATED übernehmen. Der Server leitet den Inhalt der Variablen PATH_INFO durch sein Mapping-System und ersetzt dabei alle virtuellen durch physische Pfadangaben. So wird beispielsweise bei '/datei' als Wert von PATH_INFO und einem Mapping von '/*' auf '/usr/local/WWW/pub/*' die Variable PATH_TRANSLATED den Wert '/usr/local/WWW/pub/datei' liefern.

QUERY_STRING
Die Umgebungsvariable QUERY_STRING wird in den drei folgenden Fällen gesetzt: 1.Der Aufruf des CGI-Skripts erfolgt aus einem Dokument, das die Eingabe eines Suchindex mittels des ISINDEX-Tags erlaubt. Der Suchindex wird dann in der Umgebungsvariablen QUERY_STRING zur Verfügung gestellt. 2.Der Aufruf des CGI-Skripts erfolgt aus einem anklickbaren (sensitiven) Inline-Bild. In diesem Fall stehen in QUERY_STRING die Bild-Koordinaten des Mausklicks. 3.Das Skript ist der Empfänger der Daten eines Online-Formulars, die mittels der Methode "GET" an das Skript geschickt wurden. In allen drei Fällen hängt der WWW-Client an den, das Skript referenzierenden, URL ein Fragezeichen, gefolgt von den jeweiligen Daten an. Bei ISINDEX wären diese Daten der Suchbegriff, bei sensitiven Bildern die Mauskoordinaten und bei Online-Formularen die Formulardaten.

REMOTE_ADDR
Diese Variable enthält die IP-Adresse des Client-Rechners.
Beispiel: 130.149.18.37

REMOTE_HOST
Der Name des Rechners, von dem der Request stammt, steht in der Umgebungsvariablen REMOTE_HOST.
Falls der Server diese Information nicht besitzt, weil z.B. die zugreifende Maschine über keinen Domain-Eintrag verfügt, ist diese Variable leer.
In diesem Fall hilft REMOTE_ADDR weiter.
Beispiel: quofum.cs.tu-berlin.de

REMOTE_IDENT
Falls auf dem Client-System ein Authentifizierungsserver nach RFC 931 läuft, kann der WWW-Server die Benutzerkennung des Clients ermitteln und sie dem CGI-Skript in REMOTE_IDENT mitteilen. Da solche Authentifizierungsserver aber nicht in jedem Fall glaubwürdig sein müssen, sollte man diese Angaben mit Vorsicht behandeln und allenfalls für Logging-Zwecke benutzen.

REMOTE_USER
Bei per Kennung geschützten Dokumenten gibt diese Variable den Benutzernamen an. Dieser muß nicht notwendigerweise mit der UNIX-Benutzerkennung identisch sein.

REQUEST_METHOD
Die Methode, mit der die Anfrage erfolgte, ist in der Umgebungsvariablen REQUEST_METHOD zu finden. Bei HTTP als Server-Protokoll wären "GET", "HEAD", "PUT", "POST", usw. als Beispiele zu nennen.

SCRIPT_NAME
Diese Umgebungsvariable enthält den Dateinamen des Skripts inklusive des virtuellen Pfads. Diese Variable wird hauptsächlich für Selbstreferenzierungen des Skripts benötigt, da die Skriptdateien selbst nicht wissen können, daß sie über einen virtuellen Pfadnamen zu erreichen sind.

SERVER_PORT
In dieser Variablen steht die Portnummer, an die die Anfrage gesendet wurde (im allgemeinen: Port 80).

SERVER_PROTOCOL
Der Name und die Version des Protokolls, mit dem die Anfrage an den Server gestellt wurde, sind in der Umgebungsvariablen SERVER_PROTOCOL zu finden.
Format: <protocol>/<revision>

Für den CGI-Programmierer sind zunächst nur folgende davon wichtig:
SCRIPT_NAME welches Script muss ausgeführt werden
PATH_EXPANDED der reale Pfad zur gewünschten Datei
QUERY_STRING die über die URL übertragenen Zusatzinformationen

Hinweis: Die tdbengine bereitet diese Informationen vollautomatisch auf.

Die Ein- und Ausgabekanäle
Diese Informationen reichen jedoch nicht aus. Insbesondere hat das CGI-Programm auf diese Weise noch keine Möglichkeit, seine Ergebnisse (Ausgaben) dem Klienten mitzuteilen.

Es wäre nun zwar denkbar, dass das CGI-Programm eine der Environment-Variablen ändert (und dorthin seine Ausgabe schreibt), woraufhin der http-Server diese an den Klienten überträgt. Das hätte allerdings zwei gravierende Nachteile: Der Speicherplatz für das Envorinment ist begrenzt, wodurch auch die Antworten des CGI-Programms begrenzt wären. Und schließlich müsste der http-Server die Datenübermittlung übernehmen und wäre an dieser Stelle für andere Aufgaben nur eingeschränkt einsetzbar.

Deshalb sieht der CGI-Standard vor, dass dem CGI-Programm direkt der Ausgabekanal zum Klienten übergeben wird. Die Beschränktheit des Environments hat auch zur Folge, daß für größere Informationsübertragungen vom Klienten zum CGI-Programm ein zusätzlicher Übertragungskanal eingerichtet wird.

Somit werden also beim Start des CGI-Programms zwei Informationskanäle eingerichtet:

  • StdOut zur Übertragung von Informationen vom CGI-Programm zum Klienten
  • StdIn zur Übertragung von Informationen vom Klienten zum CGI-Programm

Während aber StdOut immer eingesetzt wird (ein CGI-Programm muss eine Antwort liefern), wird StdIn nur in ganz speziellen Fällen verwendet.

get und post
Für die Übertragung von Informationen vom Klienten zum Server sieht der CGI-Standard zwei Methoden vor:

get

hier werden alle Informationen in der URL übergeben. Dabei werden die Zusatzinformationen von der ursprünglichen URL durch ein Fragezeichen "?" abgetrennt Alles was nach dem Fragezeichen kommt, überträgt der http-Server in die Envonment-Variable QUERY_STRING. Einzelne Teilinformationen werden durch das "&"-Zeichen voneinander abgetrennt. Beispiel: http://www.tdb-engine.de/cgi-tdb.prg?command=read&page=main.
QUERY_STRING=command=read&page=main.

post

hier werden alle Informationen in den StdIn-Kanal des Servers übertragen Daraus folgt schon, dass ein normaler Link <a href="..."> nur die get-Methode verwenden kann (weil hier ja nur die URL übertragen wird). Nur in Formularen kann man wählen welche Methode eingesetzt werden soll: <form method="get"... -> get
<form method="post" -> post Hinweis: In Formularen ist sogar eine gemischte Form möglich, weil hier einerseits die URL für den Programmaufruf angegeben wird (action="...) und damit get-Zusätze enthalten kann, andererseits die Formularfelder mit der Methode "post" übertragen werden können.

Und so werden Formularfelder und deren Inhalte an den Server (und damit auch an das CGI-Programm) übertragen:  

  
<input type="text" name="xyz"> xyz=Eingabe des Benutzers
<input type="hidden" name="xyz"> xyz=Eingabe des Benutzers (unverschlüsselt!)
<input type="checkbox" name="xyz" value="1"> xyz=1, wenn vom Benutzer ausgewählt
<input type="radio" name="yxz" value="1"> xyz=1, wenn diese Option ausgewählt wurde
<input type="radio" name="xyz" value="2"> xyz=2, wenn diese Option ausgewählt wurde
<select name="xyz"> xyz=1, wenn diese Option ausgewählt wurde
<option value="1">
<option value="2">...
</select>
<select name="xyz" multiple> xyz=1&xyz=2.. wenn diese Optionen ausgewählt wurden
<option value="1">
<option value="2">...
</select>
<textarea name="xyz">...</textarea> xyz=Inhalt des Textfeldes
<input type="submit" name="xyz" value="done"> xyz=done, wenn dieser Schalter betätigt wurde

Beispiel:
In einem HTML-Dokument steht folgendes Formular

<form action="http://www.tdb-engine.de/cgi-tdb/savemail.prg" method="get">
E-Mail: <input type="text" name="email"><br>
Name: <input type="text" name="name"><br>
<input type="submit" name="done" value="absenden">
</form>

Der Anwender füllt die beiden Felder aus mit "info@tdb-engine.de" und "Webmaster".
Der Brower schickt demnach folgende URL an den http-server:

http://www.tdb-engine.de/cgi-tdb/savemail.prg?email=info@tdb-engine.de &name=Webmaster&done=absenden

Wenn im Formular nichts anderes angegeben wird, werden die vom Benutzer eingegeben Daten in eine spezielle Form gebracht, die mit url-encoding bezeichnet wird.
Denn damit die Daten über eine normale URL übertragen werden können, dürfen viele Zeichen nicht verwendet werden (Beispiel: Leerzeichen, Umlaute, &/?...).

Aus diesem Grund werden solche Zeichen vor der Übertragung in URL-zugelassene Zeichen(-Folgen) umgewandelt. Da die Codierung (zumindest bei Formularen) vom Browser erledigt wird, und die Decodierung auf der Server-Seite komplett von der tdbengine (nicht jedoch vom http-Server!) erledigt wird, wollen wird dieses Thema hier nicht weiter vertiefen.

Sie können sich die Codierung ansehen, wenn Sie beispielsweise eine der vielen Suchmaschinen verwenden, Suchbegriffe mit Umlauten eingeben und die resultierenden URLs genauer betrachten.

Hinweis: Das erweiterte Protokoll multipart/form-data wird in diesem Kurs nicht behandelt.

Zusammenfassung
In dieser Lektion ging es um die wesentlichen Grundbegriffe. Sie sollten jetzt wissen, was ein CGI-Programm ist, wo es läuft, und wie der Informationsaustausch zwischen Klient und Server prinzipiell funktioniert. Aufgaben:
1. Woran erkennt ein http-Server, dass es sich einer URL um einen CGI-Aufruf handelt?

2. Rufen Sie im Internet folgende URL auf: http://www.tdb-engine.de/scripts/set.prg
Sie erhalten eine Liste mit (fast) allen Environment-Variablen, die der http-Server (in diesem Fall der Internet Information Server) einem CGI-Programm zur Verfügung stellt. Aus welcher dieser Environment-Variablen kann man die Browser-Software des Klienten erkennen? Wie lautet diese Angabe für Ihren Browser?

3. Wie heißt das CGI-Programm, das bei Yahoo eine Suchanfrage beantwortet?

4. Sie haben folgendes Formular in einer HTML-Seite:

<form action="http://www.meinedomain.de/cgi-tdb/anmeldung.prg" method="get">
Vorname: <input type="text" name="Vorname"><br>
Name: <input type="text" name="Name"<br>
<input type="submit" name="command" value="absenden">
</form>

Der Anwender füllt die Felder mit "Hans" und "Müller" aus und drückt den "absenden"-Schalter.
Wie lautet die URL, die der Klient an den server schickt?

5. Was enthält in diesem Fall (Aufgabe 4) die Environment-Variable QUERY_STRING?



tdbengine Anwendungen im Web:

Open-Source Web CMS


Open-Source Bug-Tracking


Free wiki hosting

Open-Source Wiki-System

Kostenloses Foren-Hosting

Diät mit tdbengine 8-)

tdbengine chat
irc.tdbengine.org
#tdbengine

   Copyright © 2003-2004 tdb Software Service GmbH
   Alle rechte vorbehalten. / All rights reserved
   Letzte Änderung: 25.11.2003


ranking-charts.de

Programmers Heaven - Where programmers go!