VSIS: Arbeitsgruppe Verteilte Systeme und Informationssysteme prInt: Das Praktikum Internet-Werkzeuge  Praktikum Internet-Werkzeuge   Fachbereich
  Aufgaben  Dokus  Links   Universität Hamburg

 Was ist CGI?

Die Abkürzung CGI steht für Common Gateway Interface und beschreibt, wie vom Anwender im Web-Browser eingegebene Daten an den Web-Server gesendet und dort an ein CGI-Programm weitergereicht werden. Auf dieser Seite soll der Schematische Abläuf beim Aufruf von CGI-Programmen erklärt werden.

Den Ablauf eines CGI-Aufrufes kann man in 4 Schritte aufteilen. Diese werden im Folgenden beschreiben.

 1. Übertragung an den Web-Server

Im <form>-Tag wird mit dem Attribut "action=http://www.xyz.de/cgi-bin/programmname" festgelegt, mit welchem Protokoll (hier "http", also das Hyper Text Transfer Protokoll) an welchen Server ("www.xyz.de") die Daten gesendet werden sollen und welches Programm ("/cgi-bin/programmname") diese Daten verarbeiten soll.

Bevor die Daten an den Server gesendet werden, werden sie zunächst vom Browser zu einer einzigen Zeichenkette verpackt und Sonder- und Leerzeichen werden Kodiert.

Die Art und Weise der Datenübertragung wird durch den Parameter "method=" gesteuert. Dabei wird grundsätzlich zwischen den beiden Methoden "GET" und "POST" unterschieden:

In folgenden Beispiel wird "GET" angegeben : In diesem Fall wird aus der im <form>-Tag angegebenen URL des CGI-Programms und der aus den Eingabedaten erzeugten Zeichenkette, getrennt durch ein "?", eine Pseudo-URL erzeugt.

Dein Name:

Dies ist der HTML-Quellcode:

<form method="get" action="/tools/forms.phtml">
Dein Name: <input type="text" name="name"/>
<input type="submit" value=" Eingabe abschicken "/>
</form>
Für unser Beispiel könnte die also so aussehen:
http://print-www.informatik.uni-hamburg.de/tools/forms.phtml?name=%C4ndi+M%FCller
Falls Sie das oben dargestellte Formular einmal abgeschickt haben, dann wird ihr Browser im Anzeigefeld "Location:" eine entsprechende Pseudo-Adresse angeben.

Die Methode "GET" eignet sich nicht zur Übertragung größerer Datenmengen, da die länge von URLs beschränkt ist.

Alternativ kann als Methode "POST"verwendet werden. Dazu muß der HTML-Code unseres Beispiels wie folgt geändert werden :


<form action="http://www.bingo.baynet.de/cgi-bin/ub/cgi-demo" method="post">

Der Benutzer sieht zunächst keinen Unterschied :

Dein Name:

Dies ist der HTML-Quellcode:

<form method="post" action="/tools/forms.phtml">
Dein Name: <input type="text" name="name"/>
<input text="submit" value=" Eingabe abschicken ">
</form>

Was passiert diesmal, wenn Sie den OK-Knopf betätigen ?

Bei Verwendung von "method=POST" bleibt die angegebene URL unverändert. In diesem Fall wird die verpackte Zeichenkette nach dem Verbindungsaufbau für den Anwender unsichtbar (außer Option "Sicherheitseinstellungen / Weiterreichen eines nicht geschützten Dokuments" bei Netscape) an den Server übertragen. Wenn Sie das zweite Formular einmal abschicken, dann wird ihr Browser im Anzeigefeld "Adresse" nur die echte Adresse des CGI-Programms, also
http://print-www.informatik.uni-hamburg.de/tools/forms.phtml
anzeigen.

Wenn Sie dann die Funktion "Anzeigen / Erneut laden" Ihres Browsers aufrufen, wird er Sie fragen "Erneutes Versenden der Datenart ?" : die Zeichenkette muß erneut übertragen werden. (Zumindest bei Netscape ist das so, der Internet Explorer fragt nichts, aber er versendet auch nicht erneut, was zu einer fehlerhaften Anzeige führt.)


 2. Start des CGI-Programms

Der Server erkennt an dem Pfadnamen der angefragten URL, (i.A. "cgi-bin"), daß nicht ein vorhandenes Dokument zurückgesendet sondern ein CGI-Programm gestartet werden soll. Der Server muß diesem Programm die Daten aus dem Formular bereitstellen. Hierzu werden Environment-Variablen verwendet.

Die Variable "REQUEST_METHOD" hat entweder den Wert "GET" oder "POST". Im Fall von "GET" wird die verpackte Zeichenkette in einer weiteren Variablen "QUERY_STRING" bereitgestellt; bei "POST" wird in einer Variablen "CONTENT_LENGTH" die Länge der Zeichenkette abgelegt, die eigentliche Zeichenkette wird dem Programm auf stdin (Standard-Input) zur Verfügung gestellt.

 3. Lauf des CGI-Programms

Zur Erstellung eines CGI-Programms gibt es keine spezielle Programmiersprache. Im einfachsten Fall kann das Programm unter Unix ein shell script bzw. unter DOS eine .bat-Datei sein. Es können aber auch beliebige höhere Programmiersprachen wie c, Pascal oder Fortran benutzt werden. Sehr weit verbreitet ist auch die Script-Sprache Perl.

Das CGI-Programm packt zunächst die empfangene Zeichenkette wieder aus. Der weitere Programmablauf wird dann durch die so erhaltenen Parameter gesteuert.

Die Ausgabe des Programms erfolgt in einem Datenformat, daß vom Browser interpretiert werden kann; in den meisten Fällen ist das entweder "text/html" (also wieder ein HTML-Dokument) oder "image/gif" (also eine Grafik).

Als Beispiele stehen ein kleines shell script (nämlich das von den hier gezeigten Formularen aufgerufene script) zur Verfügung. Es ruft unter anderem ein kleines C-Programm auf.

 4. Senden der Antwort an den Browser

Dieser Vorgang ist nichts CGI-spezielles mehr.

Eine graphische Darstellung einer CGI-Anfrage.

Die Spezifikation der CGI-Variablen. Diese werden vom Web-Server dem CGI-Programm zur Verfügung gestellt.

Autor: Harald Weinreich, Hartmut Obendorf

Mi 12-16 Uhr Raum: B-201 und RZ Start: 05.04.2006
Eine Veranstaltung des Arbeitsbereichs Verteilte Systeme und Informationssysteme (VSIS)

Letzte Änderung : 12.04.2005 - 16:49
EMail: prInt06@vsis.informatik.uni-hamburg.de