NewMedia
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:

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: 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


up <= home autor send mail post mail help
© Tim Ehlert
letzte Änderung: Tue Nov 14 16:16:22 MET 1995