Dokumentation: Common Gateway Interface            © by Michael Rentzsch, 2001

Inhalt <<   Vorherige    Nächste   >>

Funktionsweise der CGI-Programme

Allgemeine Funktionsweise

Aufruf

CGIs können auf verschiedene Art und Weise aufgerufen werden:

  1. Aus Formularen

    Quelltext: <FORM ACTION="../cgi-bin/my_cgi">
    Beispiel: Aufruf im  Formular



  2. Verweise (Links)

    Quelltext: <a href="../cgi-bin/my_cgi">
    Beispiel: Aufruf durch Verweis / Link


  3. Server Side Include - Anweisung

    Quelltext: <!-- #exec cgi="../cgi-bin/my_cgi" -->
    Beispiel: Server Side Include-Anweisung


  4. Automatisches Laden

    Quelltext: <meta http-equiv="refresh" content="0; URL=../cgi-bin/my_cgi">
    Beispiel: Weiterleitung


  5. Bilder / Klänge

    Quelltext: <img src="../cgi-bin/my_cgi">
    Beispiel: CGI als Quelle für Bild

 

oben

 

Einlesen von Daten

CGI-Programm lesen die Daten mit denen sie arbeiten aus der Standardeingabe und bzw. oder aus Umgebungsvariablen, die ihnen zur Laufzeit vom Serverprozess zur Verfügung gestellt werden. Im folgenden eine Liste aller dieser Variablen mit ihrer jeweiligen Bedeutung:

 

Variablenname Beschreibung
CONTENT_LENGTH Enthält die Anzahl der Zeichen, die beim Aufruf des CGI-Scripts über die POST-Methode übergeben wurden. Wenn das CGI-Script beispielsweise beim Absenden eines HTML-Formulars aufgerufen wurde und dort als Übertragungsmethode POST angegeben ist, steht in dieser Umgebungsvariablen, wie viele Zeichen das Script von der Standardeingabe lesen muß, um die übermittelten Formulardaten vollständig einzulesen.
CONTENT_TYPE Enthält beim Aufruf über die POST-Methode den Mime-Type der übergebenen Daten. Wenn das CGI-Script beispielsweise beim Absenden eines HTML-Formulars aufgerufen wurde und dort als Übertragungsmethode POST angegeben ist, steht in dieser Umgebungsvariablen der für HTML-Formulare typische Mime-Type application/x-www-form-urlencoded.
GATEWAY_INTERFACE Enthält die Version der CGI-Schnittstelle, die von dem installierten Server unterstützt wird, z.B. CGI/1.1, wenn die gegenwärtig übliche Version 1.1 der Schnittstellendefinition unterstützt wird.
HTTP_ACCEPT Enthält die Liste der Mime-Types, die der aufrufende WWW-Browser akzeptiert. Die Angabe */* bedeutet: der WWW-Browser akzeptiert alles.
HTTP_REFERER Enthält die URL-Adresse der WWW-Seite, von der aus das CGI-Script aufgerufen wurde. Der Wert wird jedoch nicht von allen WWW-Browsern übermittelt, ist also nicht in jedem Fall verfügbar.
HTTP_USER_AGENT Enthält Produkt- und Versionsinformationen zum aufrufenden WWW-Browser. Ein CGI-Script kann auf diese Weise ermitteln, welchen Browser ein Anwender verwendet.
PATH_INFO Enthält spezielle Pfadinformationen, wenn das Script über die GET-Methode aufgerufen wurde, und zwar relativ zu den im WWW-Server eingestellten Root-Verzeichnissen.
PATH_TRANSLATED Enthält spezielle Pfadinformationen, wenn das Script über die GET-Methode aufgerufen wurde - im Unterschied zu PATH_INFO jedoch Pfadangaben entsprechend der Verzeichnisstruktur des Server-Rechners.
QUERY_STRING Enthält beim Aufruf über die GET-Methode eine Zeichenkette mit Daten, die dem Script übergeben wurden. Wenn ein Anwender ein HTML-Formular ausgefüllt hat, bei dessen Absenden das CGI-Script aufgerufen wurde, stehen in dieser Umgebungsvariablen die ausgefüllten Formulardaten. Die Daten sind nach den Regeln des Mime-Types application/x-www-form-urlencoded kodiert.
REMOTE_ADDR Enthält die IP-Adresse des Server-Rechners, über den das CGI-Script aufgerufen wurde, wenn es ein anderer Server ist als der, auf dem das CGI-Script liegt. Dieser Wert wird jedoch nicht in allen Fällen gesetzt.
REMOTE_HOST Enthält die Domain-Adresse des Server-Rechners, über den das CGI-Script aufgerufen wurde, wenn es ein anderer Server ist als der, auf dem das CGI-Script liegt. Dieser Wert wird jedoch nicht in allen Fällen gesetzt.
REMOTE_IDENT Enthält Protokollinformation, wenn auf dem Server das Protokoll ident für geschützte Zugriffe läuft.
REMOTE_USER Enthält den Benutzernamen, der das CGI-Script aufgerufen hat. Dieser Wert wird nur gesetzt, wenn die Server-Authentifizierung eingeschaltet ist.
REQUEST_METHOD Enthält den HTTP-Befehl, mit dem das CGI-Programm aufgerufen wurde. Entweder GET oder POST. Ein CGI-Script kann beispielsweise diese Variable auslesen und danach entscheiden, wie es Formulardaten einlesen kann: entweder von der Standardeingabe (bei Methode POST) oder aus der Umgebungsvariablen QUERY_STRING (bei Methode GET).
SCRIPT_NAME Enthält die URL-Adresse des aufgerufenen CGI-Scripts realtiv zur Domain-Adresse, also z.B. /cgi-bin/search.pl.
SERVER_NAME Enthält den Namen des Servers (z.B. www.xy.com) oder die IP-Adresse (z.B. 127.0.0.1).
SERVER_PORT Enthält die Portnummer, die für den WWW-Server eingerichtet wurde. Normalerweise ist dies für WWW-Server die Nummer 80.
SERVER_PROTOCOL Enthält die Version des HTTP-Protokolls, das der installierte WWW-Server unterstützt, z.B. HTTP/1.0, wenn die gegenwärtig übliche Version 1.0 des HTTP-Protokolls unterstützt wird.
SERVER_SOFTWARE Enthält die Produktbezeichnung der installierten Server-Software, z.B. OmniHTTPd/2.0a1 (Win32; i386)

Quelle: selfhtml

oben

 

Übermittlung von Formulardaten

Am häufigsten werden CGI-Programme zur Auswertung von Formulardaten verwendet. Dabei existieren zwei Möglichkeiten, wie die eingegebenen Daten an das Programm übergeben werden: Get und Post. Die verwendete Methode wird im "Kopf" des Formulares festgelegt:
<form method="Get"> oder <form <method="Post">

POST

Bei dieser Methode werden die Formulardaten (in einem entsprechend "codierten" String) vom CGI aus der Standardeingabe (stdin) gelesen. Dabei ist zu beachten, dass die Anzahl der dazu gehörenden Zeichen in der Umgebungsvariable CONTENT_LENGTH stehen, es erfolgt kein Dateiendezeichen!

GET

Hier werden die Formulardaten in der Umgebungsvariable QUERY_STRING übergeben. Bei der Methode GET ist zu beachten, dass die Daten danach in der URL-Zeile des Browsers erscheinen (nicht geeignet für Passwörter).

Formatierung

Zu den übertragenen Daten gehören die Feldnamen und -werte des Formulars, die wie folgt dem CGI übergeben werden:
Name1=Wert1&Name2=Wert2&Name3=Wert3

oben

 

Ausgabe

CGI-Programme geben ihre Informationen über die Standardausgabe aus. Dabei kann dies:

sein. Natürlich muss es dem Browser mitteilen, wie er die Daten interpretieren soll, dies geschieht in der ersten Zeile:

echo Content-type: text/html     oder
echo Content-type: text/plain

Es muss danach eine Leerzeile folgen (Zeilenwechsel).

oben

 

Programmiersprachen

Einer der Vorteile von CGI ist, dass man die Programme in seiner "Lieblingsprogrammiersprache" schreiben kann, sofern diese folgendes unterstützt:

Perl

Die für CGI-Programme sicherlich am meisten verwendete Sprache ist dabei Perl. Dies hat verschiedene Ursachen:

  1. Skriptsprache (d.f. Remote System ist "egal")
  2. Simple Routinen zum Parsen (Beispiel)
  3. einfache Dateibearbeitung

oben