Das Common Gateway Interface, kurz CGI, eines WWW-Servers ermöglicht es zudem beliebige vorbereitete Programme auszuführen. Diese Programme erhalten Eingabeinformationen vom WWW-Client und können HTML Daten an den WWW-Client zurück liefern.
Wir werden in diesem Tutorial die wichtigsten Fähigkeiten und Eigenschaften des CGI besprechen. Der Inhalt ist wie folgt:
Viele Information liegen weder zur Zeit, noch werden sie in Zukunft als HTML Dokumente vorliegen, zum Beispiel PostScript- oder Word- Dokumente, SQL Datenbanken oder Volltext Dokumenten-Systeme. Andere Informationen können überhaupt nicht als statische Informationen abgelegt werden, zum Beispiel interaktive Antworten auf eine Anfrage eines WWW-Clients.
In all diesen Fällen bietet das GCI eine standardisierte Lösung an. Einige praktische Beispiele sind:
Verbreitete Programmiersprachen sind etwa die folgenden
sh, csh, tcsh, bash, ksh, zsh
,
Die Auswahl eines bestimmten CGI-Programs geschiet wie üblich durch Angabe in einem URL.
http://server-ip/path/cgi-prog/path-info?query-string
Der vordere Teil entspricht wie bei HTML-Seiten
der Zugriffsmethode (http:
),
dann dem Servername bzw. dessen IP-Adresse (//server-ip
)
(u.U. mit Portangabe),
gefolgt von dem Pfad zur Resource (path
).
Der Pfad für CGI-Programme beginnt meist mit
cgi-bin
. Zulässige Pfade müssen bei der
Konfiguration des WWW-Servers
(bei httpd
in der httpd.conf
)
angegeben werden.
Dann folgt der Name des CGI-Programs
cgi-prog
. Eine Namensendung auf .pl
deutet z.B. auf ein Perl Program hin.
Die weiteren Bestandteile
/path-info?query-string
werden wir im folgenden ausführlicher besprechen.
Ein Hinweis ist zum Verständnis noch wichtig:
mit dem URL können nicht direkt Kommandozeilenparameter an das CGI Program übergeben werden.
D.h. es ist nicht möglich für das
CGI Programm cgi-prog arg1 arg2
zu schreiben
und zu erwarten, daß arg1
bzw. arg2
als Argumente für das CGI Program verwendet werden.
Die Informationen an das CGI Program werden auf anderem
Wege weitergegeben.
Wir besprechen im folgenden zuerst die Übertragung der Informationen vom WWW-Server zum CGI Program, dann die Übertragung der Informationen vom CGI Program zum WWW-Server und WWW-Client und schließlich die Aufbereitung und das Senden der Informationen vom WWW-Client über den WWW-Server zum CGI-Program.
QUERY_STRING
Umgebungsvaraiblen,
PATH_INFO
Umgebungsvaraiblen und
Stdin
.
?
folgt.
http://server-ip/path/cgi-prog/path-info?query-string
Die Zeichenkette query-string
wird dem CGI Program in der
Umgebungsvariablen QUERY_STRING
zur Verfügung gestellt.
Sie ist im normalen URL Kodierungsschema verschlüsselt.
D.h. Leerzeichen (Blanks) werden in +
verwandelt
und spezielle Zeichen werden in hexadezimaler Form %xx
angegeben. Zur Benutzung dieser Informationen muß diese
Zeichenkette wieder dekodiert werden.
Die Angabe des Query-Strings kann von Hand erfolgen, oder
sie kann vom WWW-Client generiert werden.
Zum Beispiel die HTML Keywörter <ISINDEX>
und
<FORM>
generieren diese Information automatisch.
Wie der Name schon sagt wird der Query-String hauptsächlich zur
Übermittlung einer Anfrage, bzw. eines Anfragestrings an das
GCI Program genutzt.
Die Path-Info Methode benutzt
den Teil des URL, der zwischen dem Namen des CGI Programs
cgi-prog
und dem ersten ?
steht.
http://server-ip/path/cgi-prog/path-info?query-string
Die Zeichenkette /path-info
wird dem CGI Program in der
Umgebungsvariablen PATH_INFO
zur Verfügung gestellt.
Sie ist nicht im URL Schema kodiert.
Die Angabe der Path-Info Zeichenkette muß explizit vorgenommen
werden. Der wichtigste Verwendungszweck ist die Angabe
von Kontextinformationen für das CGI Program.
Zum Beispiel werden gerne Grundinformationen wie die
aktuelle verwendete Sprache in Path-Info übergeben
/cgi-prog/language=english?query-string
.
Da es bei manchen Betriebssystemen Beschränkungen in der
zulässigen Länge von Umgebungsvariblen gibt, wurde eine weiter
Methode der Informationsübermittlung spezifiziert: direkt
von der Stdin
"Datei".
Dabei wird die sonst in QUERY_STRING
stehende Zeichenkette per Pipe gesendet und kann vom
CGI Program direkt von Stdin
gelesen werden.
Die Information ist wie im QUERY_STRING
im normalen URL Kodierungsschema verschlüsselt
und sie muß zur Benutzung erst dekodiert werden.
Die Auswahl dieser Methode geschiet im WWW-Client mit
dem HTML <FORM>
Keyword und dem
zusätzlichen Parameter METHOD="POST"
.
Laut Angaben der CGI Entwickler soll diese Methode
in Zukunft nur noch verwendet werden, d.h. die
Infromationsübergabe per QUERY_STRING
soll
nicht mehr verwendet werden.
Die Länge des QUERY_STRING
sowie die
Anzahl der Bytes in Stdin
werden in der
Umgebungsvariablen CONTENT_LENGTH
angegeben.
Die Abfrage auf End-of-File für Stdin
ist nicht definiert und funktioniert somit nicht.
Stdout
"Datei" verwendet.
Die Schwierigkeiten liegen nur darin, das die "Datei"
ein bestimmtes Format haben muß.
Die ersten beiden Zeilen, der sog. Header, muß aus ASCII Text bestehen. Die zweite Zeile muß gegenwärtig leer sein (und zeigt so das Ende des Headers an), die erste Zeile muß entweder einen MIME Typ oder einen Ort spezifizieren.
Der MIME Inhaltstyp wird mit dem Keyword
Content-type:
angegeben, gefolgt von einem
gültigen MIME-Typ und einem gültigen MIME-Subtyp.
Also etwa wie folgt
Content-type: m-type/m-stype
Beispiele für MIME Typen sind
text/html
für HTML Text oder
text/plain
für einfachen ASCII Text.
Der Rest der "Datei" muß dann natürlich aus
Informationen von diesem Typ bestehen.
Auf dem selben Weg können auch Graphiken, Sound und Videos
gesendet werden.
Die Ortsangabe erfolgt mit dem Keyword
Location:
, gefolgt von einem gültigen URL.
Zum Beispiel wie folgt
Location: ftp://host/dir/dateix.txt
In diesem Fall erzeugt der WWW-Client nach Erhalt dieses Headers eine FTP-Verbindung und besorgt sich die Information von dort.
<FORM>
Keyword
angegeben. Das FORM
Keyword hat zwei Parameter, die
die Übertragung regeln.
METHOD="GET"
wird die Information dem CGI Program in der
Umgebungsvariablen QUERY_STRING
übergeben.
METHOD="POST"
wird die Information dem CGI Program in der
"Datei" Stdin
übergeben.
Die Daten des Formulars werden in beiden Fällen wie folgt
an das CGI Program gegeben.
Das Formular definiert mit dem
NAME
Keyword Namen für Eingabefelder.
Beim Absenden des Formulars wird der Inhalt der jeweiligen
Eingabefelder zusammen mit dem Namen gesendet.
Dies geschiet als Folge von
name=content
Paaren, die durch &
getrennt sind.
name
bezeichnet den in
NAME=name
definierten Feldnamen und
content
ist der Inhalt des
Eingabefeldes.
Der Name und der Inhalt wird automatisch entsprechend dem
normalen URL Kodierungsschema verschlüsselt.
Im CGI Program wird dann diese Folge dekodiert
und es kann entsprechend der Inhalte verfahren werden.
Weitere Informationen sind der Spezifikation des
FORM
Keywords der HTML Defnition zu entnehmen.
Zur Dekodierung existieren oft schon fertige Prozeduren
in den entsprechenden Programmiersprachen.
REQUEST_METHOD
.
Mögliche Werte sind GET
, POST
und HEAD
.
CONTENT_LENGTH
Bytes von
QUERY_STRING
oder Stdin
.
&
.
name=content
entlang =
.
Ein Perl Skript, das die empfangenen Variablen und Werte in HTML codiert und an den Absender zurück schickt wird in dem Abschnitt zu Perl besprochen.
Die für die Benutzung wichtigsten Definitionen haben wir bereits besprochen. Für die Vollständige Spezifikation sei auf die orginal URLs der CGI Definition verwiesen.