![]() |
![]() |
|||
| Aufgaben Dokus Links | ||||
|
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.
|
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.
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
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 :
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.)
|
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.
|
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.
|
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
|
||||||