Der 4D Web Server unterstützt CGIs (Common Gateway Interface). CGI sind für Web Seiten dasselbe wie Plug-Ins für 4D Methoden. Das CGI wird vom Web Server aufgerufen, führt eine Aufgabe aus und gibt die Antwort zurück: — eine komplette Web Seite oder HTML Code, der aus einer vom Server gesendeten Seite eingefügt wurde. CGI werden häufig eingesetzt, um Zugriffszähler anzuzeigen, Gästebücher (guestbook) zu verwalten, den Inhalt eines HTML Formulars als E-Mail zu versenden (form to mail), etc. Es gibt eine Vielzahl frei verfügbarer CGI, die meisten davon als „freeware“.
Hinweis: CGI bezeichnet ursprünglich die Norm für die Kommunikation externer Anwendungen mit den HTTP Servern. Heute werden mit CGI auch die externen Anwendungen selbst bezeichnet.
4D unterstützt alle Arten von CGI unter Windows und auf Mac OS X. Ein CGI erscheint als ausführbares Programm, als Skript vom Typ PERL oder als DLL mit Schnittstelle zu einem Web Server.
- Anwendungen (.EXE) welche die “Konsole” und die Umgebungsvariablen verwenden. Der Quellcode ist in der Regel cross-plattform (Windows und Unix).Die CGI Namen lauten nnnn.exe oder nph-nnn.exe.
Weitere Informationen dazu finden Sie im Internet unter http://httpd.apache.org/docs/2.1/howto/cgi.html. - DLL ISAPI, das sind z.B. Externals für IIS (Internet Information Server). Ihre Namen lauten: nnnn.dll oder nph-nnn.dll. Zur Optimierung bleiben DLL, die auf diese Weise aufgerufen werden, im Hauptspeicher erhalten, bis der Web Server gestoppt wird.
Weitere Informationen dazu finden Sie im Internet unter http://www.microsoft.com/iis/. - PERL Skripte, welche die “Konsole” und die Umgebungsvariablen verwenden. Diese CGI benötigen für die Ausführung einen Interpreten. Sie haben jedoch den Vorteil, dass sie vollkommen crossplattform sind (Windows, Unix und Mac OS). Ihre Namen lauten nnnn.pl, nph-nnnn.pl, nnnn.cgi oder nph-nnnn.cgi
Weitere Informationen dazu finden Sie im Internet unter http://www.perl.com/.
Ein automatischer CGI Aufruf erfolgt je nach auszuführender Aufgabe des CGI über eine URL, eine Aktion oder einen in eine Seite eingefügten HTML Tag. Die HTML Folge muss in jedem Fall /cgi-bin/, gefolgt vom Namen des CGI und eventuell einem Zugriffspfad enthalten (mit der HTML Syntax) sowie eine Abfragefolge.
So löst z.B. die URL “http://195.1.2.3/cgi-bin/search.exe” die Ausführung des CGI search.exe aus. Setzen Sie <IMG SRC="/special/cgi-bin/counter.exe"> in einer HTML Seite, wird beim Senden der Seite das CGI counter.exe ausgeführt.
CGI werden nur aufgerufen, wenn sie im Ordner cgi-bin auf der obersten Ebene liegen. Dieser Ordner muss wiederum im Ordner des Web Servers oder in einem Unterordner davon liegen. Es kann pro Server mehrere Ordner cgi-bin geben. Dieser Ordner kann auch andere Dateien enthalten, jedoch werden von einem Web Client aus nur die ausführbaren Dateien aufgerufen.
Anordnung des CGI “Count.exe”:

Beispiele für Anordnung und aufrufbare URL:
Anordnung der Elemente | Dazugehörige URL |
(Ordner des Web Servers) |
|
Ordner [MeineDB] |
MeineDB.4db (Struktur) | (http://195.1.2.3/) |
Ordner [cgi-bin] |
counter.exe | (http://195.1.2.3/cgi-bin/counter.exe) |
Ordner [Diverses] |
Ordner [cgi-bin] |
script.pl | (http://195.1.2.3/Diverses/cgi-bin/script.pl) |
Um CGI im manuellen Modus aufzurufen, benötigen Sie den Befehl SET CGI EXECUTABLE. Damit können Sie ein CGI ausführen, ohne dass es für den Web Benutzer in der URL sichtbar wird. Weitere Informationen dazu finden Sie in der Beschreibung zu diesem Befehl.
Der Aufruf eines CGI verändert nicht die 4D Umgebung (Auswahlmengen, Variablen...)
4D schreibt für die Antwort keine bestimmte Größe vor. Dagegen ist die Verarbeitung eines CGI auf 30 Sekunden begrenzt. Danach gibt der Web Server einen Fehler zurück.
Generiert der Aufruf eines CGI einen Fehler, gibt 4D eine der folgenden Antworten in Form einer HTML Standardseite zurück:
- Nicht gefunden: 4D hat das CGI nicht gefunden oder der PERL Interpreter ist nicht installiert
- Untersagt: Die angeforderte Anwendung liegt nicht im Ordner [cgi-bin]
- Timeout: Das CGI konnte die Anfrage nicht in 30 Sekunden bearbeiten
- Fehlerhafte Antwort: 4D konnte die Antwort des CGI nicht bearbeiten oder das DLL ISAPI hat eine Ausnahme ausgelöst
- Interner Fehler: Speicher voll, etc.
Hinweis: Funktioniert ein CGI nicht, prüfen Sie, ob die Ausführungsberechtigung des CGI passt und ob der Zeilenvorschub im CGI Skript korrekt ist.
Dieser Abschnitt richtet sich an Programmierer, die CGI für ihre 4D Datenbanken entwickeln wollen.
Umgebungsvariablen: 4D definiert die Umgebungsvariablen in Übereinstimmung mit den Spezifikationen CGI/1.1. Dabei gilt folgendes:
GATEWAY_INTERFACE: immer “CGI/1.1”
SERVER_SOFTWARE: immer “4D WebStar_D/Version”
SERVER_PROTOCOL: immer “HTTP/1.0”
SERVER_PORT_SECURE: enthält “1” bei abgesicherter HTTP Verbindung, sonst “0”.
PATH_TRANSLATED: enthält den kompletten Zugriffspfad des HTML Ursprungs des Servers. Hinzugefügt wird der Pfadteil, der auf den Namen des CGI folgt. Aus Sicherheitsgründen kann dieser Teil nur die Abfolgen // oder .. enthalten.
Beispiel: Ursprung des Servers “C:/web”. Für den Aufruf eines CGI vom Typ
/cgi-bin/cgi.exe/path entspricht
PATH_TRANSLATED “C:/web/path”. Für den Aufruf eines CGI vom Typ
/cgi-bin/cgi.exe/../path, sendet 4D den Fehler Untersagt zurück.
REMOTE_IDENT: Benutzername, sonst nicht definiert
HTTP_AUTHORIZATION,
HTTP_CONTENT_LENGTH und
HTTP_CONTENT_TYPE: nicht definiert.
ALL_HTTP und URL sind definiert, wenn ISAPI DLLs aufgerufen wird.
CERT_xxx und
HTTPS_xxx sind definiert, wenn die Verbindung abgesichert ist (nur für DLL).
Hinweis: Sie können diese Variablen über den Befehl
SET ENVIRONMENT VARIABLE setzen.
4D fügt zusätzlich zu den Standard Umgebungsvariablen Textvariablen vom Typ FORMVAR_Variablename hinzu:
- Wird die Anfrage mit der Methode "POST" gesendet, entsprechen diese Variablen den Eingabebereichen des Formulars (zum Beispiel FORMVAR_NAME, FORMVAR_VORNAME...) mit Ausnahme der binären Felder (INPUT TYPE="FILE"). Dieses System lässt sich mit den codierten Formularen “www/url-encoded” und “multipart/form-data” verwenden.
- Wird die Anfrage mit der Methode "GET" gesendet, entsprechen diese Variablen den Werten, die von der Frageabfolge übergeben werden.
Beispiel: Für die URL .../cgi.exe?name=smith&code=75 hat FORMVAR_NAME dann den Wert “martin” und FORMVAR_CODE den Wert “75”.
Diese Funktionsweise vereinfacht die Bearbeitung von Formularen, da die Abfolgen a=1&b=2&... nicht analysiert werden müssen. Das CGI ist dann allerdings an 4D gebunden.
Die von CGI zurückgegebenen Antworten bearbeiten
Beginnt der Name des CGI (Windows Anwendung oder PERL Skript) mit nph- (No Parsing Header), gibt 4D die Antwort unbearbeitet an den Web Client zurück. In diesem Fall muss sich CGI um die HTTP Norm kümmern.
Bei DLL ISAPI analysiert 4D die Antwort nie, egal ob die Vorsilbe nph- vorhanden ist oder nicht.
Ist das nicht der Fall, sendet 4D den HTTP Kopfteil zurück:
- Wird “Content-Type” nicht vom CGI angegeben, sendet 4D immer “Content-Type: text/html”,
- Ist “Location” angegeben, ignoriert 4D die anderen Elemente der Antwort und führt eine HTTP Redirection aus,
- Ist “Status” nicht angegeben, sendet 4D “HTTP/1.0 200 OK” zurück.
4D akzeptiert im Kopfteil der HTTP Antwort jede Art des Zeilenwechsels (Windows-CRLF, MacOS-CR, Unix-LF) und formt diesen entsprechend um.
Bei DLL ISAPI akzeptiert 4D die asynchrone Bearbeitung (HttpExtensionProc gibt HSE_STATUS_PENDING zurück). Der Aufruf von ServerSupportFunction (HSE_REQ_DONE_WITH_SESSION) muss innerhalb von 30 Sekunden stattfinden. Ist die Funktion TerminateExtension definiert, wird sie immer mit dem Wert HSE_TERM_MUST_UNLOAD aufgerufen.