Skip to Content

Was ist ein CGI-Script?

Das "Common Gateway Interface" ("CGI") ist ein genormtes Protokoll, um einen Datenaustausch zwischen externen Anwendungsprogrammen (den sogenannten "CGI-Scripts") und Informationsservern, in der Regel Webservern, zu ermöglichen.

Die Aufgabe des Informationsservers ist es, auf Anfragen zu reagieren (bei Webservern meistens Anfragen von Webbrowsern) und die Programmausgaben des CGI-Scripts zurück zu senden. Bei jeder Anfrage entscheidet der Server zunächst, was angefragt wird, wobei es zwei hauptsächliche Möglichkeiten gibt:
* Wenn eine Datei im Dateisystem angefragt wird, sendet der Server den Inhalt dieser Datei
* Wenn ein CGI-Script, also ein ausführbares Programm angefragt wird, führt der Server dieses Programm erst aus und sendet dann dessen Ausgaben

Das CGI definiert also ein genormtes Vorgehen zur Erfüllung der zweiten Aufgabe eines Webservers. Es legt unter anderem fest, wie die Informationen aus der Anfrage an das CGI-Script weitergeleitet werden und wie die Ausgaben dieses Programms zurückgesendet werden können.

Der Informationsaustausch erfolgt über die sogenannten Header-Informationen des HTTP-Protokolls. Geläufige Anwendungsbeispiele für das CGI sind etwa Wikis, Gästebücher oder Foren.

Da es sich bei den ausgeführten Programmen sehr häufig um interpretierte oder sogenannte Skript-Sprachen handelt, hat sich bereits frühzeitig der Term "CGI-Script" eingebürgert als Bezeichnung für das ausgeführte Programm. Das Programm einer interpretierten Sprache liegt in einer für Menschen (mit entsprechenden Kenntnissen) lesbaren Textdatei vor und wird von einem zusätzlichen "Interpreter"-Programm Anweisung für Anweisung in einen für die Maschine verständlichen Kode übersetzt, der dann ausgeführt wird. Dieser Vorgang ist das "Übersetzen" oder "Interpretieren". Sehr geläufige interpretierte Sprachen, die heutzutage bei CGI eingesetzt werden, sind Perl oder Python.

Das Verwenden von interpretierten Sprachen hat jedoch einen gravierenden Nachteil, nämlich die Geschwindigkeit bei der Ausführung. Der Server startet für jeden Aufruf einer CGI-Anfrage eine eigene Instanz der Interpreters. Bei stark frequentierten Websites ergibt sich dadurch oft ein ernstes Problem mit der Auslastung des Servers.

Da prinzipiell nichts dagegen spricht, ein bereits vor der Anfrage in Maschinenbefehle übersetztes Programm auszuführen, kommen bei CGI-Anfragen teilweise auch Programmiersprachen wie C oder C++ zum Einsatz. Diese schaffen eine Linderung des Problems: Es muss nicht bei jeder Anfrage auf dem Server eine eigene Instanz des komplexen Interpreters gestartet werden, sondern nur eine zusätzliche Instanz eines vergleichsweise simplen vorübersetzten Programms.

Viele populäre Webserver bieten allerdings eine noch effizientere Methode des Programmaufrufs über interne Schnittstellen. Die Programme laufen dadurch bei einer Anfrage über den Prozess des Webservers ab, was ein wesentlich besseres Leistungsverhalten aufweist. In diesem Fall spricht man bei dem Programm nicht mehr von einem CGI-Script, da der Datenaustausch nicht über das HTTP-Protokoll abläuft, sondern mit dem Webserver integriert ist.