
Fachhochschule für Technik und Wirtschaft Berlin,
Fachbereich Mathematik/ Naturwissenschaften
CGI - Commen Gateway Interface
Was ist CGI?
Das Commen Gateway Interface (CGI) ist der Standart für den Informationsaustausch externer Programme oder Gateways, die einen HTTP-Server bedienen. Die aktuelle Version ist CGI/1.1.
Das Commen Gateway Interface steuert Informationsanfragen (requests) an den HTTP-Server und liefert das verwendete html-dokument zurück oder generiert ein neues, temporäres Dokument.
Dadurch wird es möglich Informationen die für den HTTP-Server normalerweise nicht zugänglich sind (z.B. Datenbanken), an einen den HTTP-Client zu übertragen, die er wieder darstellen kann.
Dieses Gateway wird heute zumeist für eine Indizierung (ISINDEX) und für die Übertragung von Information aus Formularen (FORM) benutzt.
CGI-Programme oder CGI-Scripte sind ausführbare Programme. Durch die CGI-Spezifikation können diese Programme die verschiedensten HTTP-Server (cern-Server, NCSA httpd, Netscape Comunikation Server,...) bedienen. Diese Programme oder Scripte können in den unterschiedlichsten Sprachen geschrieben werden. Die meisten sind in:
- Perl
- C/C++
- Bourn/C Shell
- aber auch in TCL, LISP, FORTRAN
geschrieben.
Informationsfluß zwischen HTTP-Server und CGI-Programm/Script
Jede Anfrage eines HTTP-Clients an das CGI wird über die URL durchgeführt. Der Server wird dann das CGI-Programm/Script aufrufen. Die Ausgabe des CGI-Programm/Script geht dann wieder an den HTTP-Client zurück.
CGI benutzt Environmentvariablen um Parameter an das CGI-Programm/Script zuschicken. Die wichtigsten Environmentvariablen sind:
- QUERY_STRING
- Der QUERY_STRING ist der gesammte String, der dem erstem ? in der URL folgt. Diese String kann durch ein:
- HTML-ISINDEX-Dokument
- HTML-FORM mit einer GET-Anweisung
- HTML-Anchor
an die URL angefühgt werden.
Der QUERY_STRING wird in das Standart URL Format codiert, daß heißt whitespaces (tab, blank, linefeed) werden zu einem + Zeichen.
- PATH_INFO
-
CGI erlaubt es zusätzliche Informationen an eine URL anzuhängen, um kontextspezifiche Information an das CGI-Programm/Script zu übergeben. Diese Information wird quasi als erweiterer Path in der URL dargestellt.
Beispiel:
Sei auf unsrem Server ein Script /cgi-bin/scriptname installiert. Wenn nun jemand von einem html-Dokument unseres Servers auf scriptname zugreift möchte ich scriptname mitteilen, daß ich mich im englisch sprachigem Verzeichnisbaum befinde. In diesem Fall wird man nun auf unser Script scriptname über <A HREF="/scripts/scriptname/language=english">scriptname</A> zugreifen. Wenn der Server nun scriptname ausführt steht die Environmentvariable PATH_INFO auf /language=english gesetzt. Das CGI-Programm/Script kann diese Information verwenden.
Übergabe von Dokumenten an den HTTP-Client
CGI-Programme/Scripte können eine Vielzahl von Dokumenttypen an den HTTP-Client zurückgeben. Sie können z.B. im html-Format, aber auch in Image-, Audio-, Video- oder in verschiedenen Textformaten sein. Weiterhin können Links auf andere Dokumente übergeben werden. Um diese Dokumententypen darstellen zu können, muß der Client wissen, um was für ein Dokument es sich handelt. Diese Information muß das CGI-Programm/Script dem HTTP-Client als erstes übermitteln.
Das geschied über einen Header den das CGI-Programm/Script in der Ausgabe mitschickt. Der Header muß aus ASCII-Text aufgebaut sein. Er besteht aus mindestens zwei Zeilen, die durch linefeed bzw. carraige return/linefeed voneinander getrennt sind.
Übertragung eines Dokument's
Die erste Zeile bezeichnet entweder den MIME-Typ in folgender Syntax:
Content-type: type/subtype
Oft werden daher MIME-Typen wie text/html oder text/plain verwendet
Übertragung von Referenzen (Links) auf Dokumente
Will man einen Link auf ein schon vorhandenes Dokument an den HTTP-Client zurückschicken, geschied das auf folgende Weise:
Location /dir1/dir2/mynewfile.html
oder
Location http://www.anywhere.org/newfile.html
natürlich sind auch andere Dienste als http erlaubt, z.B. wäre folgende Referenz denkbar:
Location ftp://ftp.ftp.org/pub/ftp.tar.gz
Die zweite Zeile, die übertragen werden muß ist eine Leerzeile.
Enviromentvariablen
Folgende Enviromentvariablen stehen zur Verfühgung:
- SERVER_SOFTWARE
-
Namen und Version der Serversoftware die auf eine Anfrage antwortet
- SERVER_NAME
-
Hostname des Servers als DNS-Alias bzw. als IP-Adresse
- GATEWAY_INTERFACE
-
Name und Versionsnummer des Gateways
- SERVER_PROTOCOL
-
Name und Versionsnummer der Serversoftware
- SERVER_PORT
-
Portnummer an den die Anfrage gesand wurde
- REQUEST_METHOD
-
Methode mit der die Anfrage gemacht wurde (GET, POST, HEAD)
- PATH_INFO
-
zusätzliche Pathinformation, diese Information kann von der Serversoftware verarbeitet werden bevor ein CGI-Programm/Script ausgef"uhrt wird.
- PATH_TRANSLATED
-
Überstetzt PATH_INFO in ein "physiklalisch/virtuellen" Path
- SCRIPT_NAME
-
absoluter Path zum script welches ausgeführt wird
- QUERY_STRING
-
Information, die dem erstem ? in der URL folgt
- REMOTE_HOST
-
Name des Hosts von dem eine Anfrage erfolgt
- AUTH_TYPE
-
Authentifizierungs Methode bei gesch"utzten Dokumenten bzw. Scripts
- REMOTE_USER
-
Username bei authentifizierungs Methoden
- REMOTE_IDENT
-
Remote user name, wenn der HTTP-Server RFC931 indentifizierung unterstützt.
- CONTENT_TYPE
-
Art der Information (POST, PUT) bei Anfragen mit zusätzlicher Information.
- CONTENT_LENGTH
-
Länge der Information die vom Client übermittelt wird
- HTTP_ACCEPT
-
MIME-Typen die der Client versteht
- HTTP_USER_AGENT
-
Namen des Browsers und der Biliothkesfunktionen die der HTTP-Client benutzt
Beispiel: Etwas anschaulicher werden die Enviromentvariablen in folgendem CGI-Script dargestellt:
http://www.fb1.fhtw-berlin.de/cgi-tim/gen.pl/test.
Diese Script benutzt eine kleine wichtigsten
Funktionen, die für CGI-Programierung benötigt werden,
bereithält. Diese kleine Library kann nun auch interaktive Forms verarbeiten.
FORMS und CGI
Es gibt zwei Methoden, um Daten aus Forms herraus zu übermitteln.
Die GET Methode
Wenn im FORM-Tag METHOD=GET definiert ist, wird das CGI-Programm/Srcipt in der Enviormentvariable QUERY_STRING bekommen.
Die POST Methode
Wenn der FORM-Tag mit METHOD=POST belegt, bekommt das CGI-Programm/Script die Eingabe von stdin. Der Server sendet kein EOF am Ende der Daten. Man muß hier die Variable CONTENT_LENGTH auswerten, um das Ende des Datenstroms festzustellen.
Codierung der FORM-Daten
Bei der Erstellung von FORMS benötigt jeder Eigabefeld einen NAME-Tag. Wenn ein User nun Daten in dieses Feld eingibt werden diese Daten nach dem submit an den Server übergeben. Diese Daten aus der Form werden dabei in einen String umgewadelt. Dieser ist aus Paaren von name=wert getrennt mit einem &-Zeichen aufgebaut. Sämtliche Whitespaces werden in + Zeichen umgewandelt.
Quellen
©
Tim Ehlert
letzte Änderung: Tue Nov 14 16:16:22 MET 1995