Das Common Gateway Interface (CGI) des Servers | Programmierung

5fd1d0dd7b4c4d5c98b5d8063d60199f

Was tut das Common Gateway Interface (CGI)

Bei dem Common Gateway Interface (CGI) handelt es sich um ein Standard für den Datenaustausch zwischen einem Webserver und externer Software, die Anfragen bearbeitet. Mit dem Common Gateway Interface ist es möglich, Webseiten dynamisch und interaktiv zu gestalten.

Funktionsweise

Ein CGI unterstützender Webserver stellt der externen Software eine Laufzeitumgebung zur Verfügung. Sie besteht aus:

  • Umgebungsvariablen (z. B. SERVER_NAME)
    Umgebungsvariablen helfen dem Programm sich über Anfragen des Webserver zu informieren.
  • Ein- und Ausgabekanäle
    Bereitstellung von Standard-Datenströmen. Meist wird verknüpft:
    – stdin-Kanal mit der Anfrage
    – stdout-Kanal mit der Antwort des Webservers

Vorteile

Mit CGI ist es möglich, HTML-Seiten dynamisch zu erzeugen, sie müssen zur Zeit der Anfrage noch nicht auf dem Server existieren. HTML-Inhalte, die im Browser angezeigt werden sollen, können dank des Common Gateway Interface von einem CGI-Programm generiert werden.

CGI-Programme können in vielen verschiedenen Programmiersprachen geschrieben sein.

Nachteile

Ein Nachteil der CGI-Ausführung ist ihre relativ geringe Geschwindigkeit, weil für jeden Aufruf des CGI ein neuer Prozess ausgeführt wird. Auserdem unterstützen viele Server nur eine begrenzte Anzahl an CGI Anfragen.

Alternativen

Alternativen, die auf CGI aufbauen, aber wiederkehrende Prozessausführungen umgehen können, sind beispielsweise:

  • FastCGI,
  • ASP,
  • PHP
  • ColdFusion.

Für den Apache HTTP-Server gibt es Module, die Interpreter für Skriptsprachen (mod_perl für PERL, mod_python für PYTHON etc.) direkt in den Webserver-Prozess einbinden, weshalb dieser nur einmal beim Start des Webservers geladen werden muss, statt bei jeder Anfrage.

Eine weitere effizientere Möglichkeit ergibt sich, wenn die Programme als externe Prozesse laufen und ihnen per FastCGI die Requests des Browsers übergeben werden.