CGI: Common Gateway Interface

Die althergebrachte Methode, um nicht nur statische Dateien, sondern auch dynamische Daten zurückzugeben, sind CGI-Skripts.

Wenn die URI der Anfrage auf ein CGI-Skript zeigt, soll diese von einem externen Programm ausgeführt werden, das die Sprache des Skripts interpretieren kann. Diesem Programm werden eine Reihe von Umgebungs-Variablen und bei POST-Requests alle weiteren gesendeten Daten übergeben.

Das Cgi-Script kann Header-Felder zurückgeben, die vom Server beim Erzeugen des HTTP-Headers berücksichtigt werden sollten. Der Microsoft Internet Information-Server tut das nicht, deshalb habe ich mir erlaubt, es in den Beispielen ebenfalls wegzulassen.
Die weitere Ausgabe des Skripts wird nach dem HTTP-Header geschickt.

Da das Interpreter-Programm jedesmal neu gestartet wird, ist diese Methode sehr langsam. Gemeinsame Daten müssen jedesmal neu gelesen werden. Die Fehlerbehandlung in den CGI-Skripten ist unbefriedigend. Außerdem entsteht mit jedem zusätzlichen Programm auch eine zusätzliche Sicherheitslücke und Fehlerquelle.
 

Beispiel: HTTP-Server mit CGI

Dieser Server behandelt URIs, die mit .cgi enden, als CGI. Er wird nicht wie das letzte Beispiel über die Kommandozeile konfiguriert, sondern über eine Text-Datei entsprechend dieser: Die Haupt-Klasse CgiHttp liest diese Daten ein und startet damit den eigentlichen Server HttpServer. Diese startet für jede Anfrage ein Instanz von HttpHandler. HttpHandler schickt entweder die gefragte Datei oder ruft den CGI-Interpreter auf.
 


Quellen: