Was ist ein CGI?

Das Common Gateway Interface (CGI) ist eine Schnittstelle von Webservern, über die standardisierter Datenaustausch zwischen externen Anwendungen und Servern möglich ist. Sie gehört zu den ältesten Schnittstellentechnologien des Internets und wird bis heute häufig verwendet. Mit CGI müssen HTML-Seiten nicht vollständig auf dem Server bereitstehen, sondern werden dynamisch erzeugt, sobald ein Nutzer eine passende Anfrage über die Website stellt.

Funktionsweise und Anwendung

Wenn ein Nutzer eine Eingabe auf einer Webseite vornimmt, werden diese Daten nicht direkt an den Server weitergeleitet, sondern müssen zunächst noch bearbeitet werden. Diese Bearbeitung erfolgt über eine externe Software (bzw. ein CGI-Skript), nicht über den Webserver direkt. Das Programm übermittelt die Daten über die standardisierte CGI-Schnittstelle an den Server, der daraufhin die neu erzeugten Informationen in HTML darstellen kann. CGI-Programme liegen in der Regel in einem eigenen Ordner auf dem Webserver.

Das CGI-Skript selbst kann in unterschiedlichsten Programmiersprachen verfasst werden. Das Common Gateway Interface sorgt dafür, dass – egal welche Sprache verwendet wird – Webserver und Skript miteinander kommunizieren können.

Anwendungsfälle von Common Gateway Interface

  • Warenkörbe: Legt ein Kunde Produkte in seinen Online-Einkaufskorb, werden diese Informationen vom CGI-Skript verarbeitet und anschließend an den Server gesendet.
  • Kommentare: Der Nutzer füllt ein Kommentarfeld aus. Mit dem Klick auf „Senden“ wird sein Text an das CGI-Skript übermittelt, das diesen wiederum an den Server weiterleitet.
  • Formulare: Auch bei Onlineformularen, z. B. für Bewerbungen oder Nachrichten, werden die eingegebenen Daten zunächst vom Common Gateway Interface verarbeitet, ehe sie an den Server übermittelt werden.
  • Website-Statistiken: Werden auf Websites Zugriffszahlen angezeigt, nutzt die dahinterliegende Technologie in vielen Fällen ebenfalls CGI.
  • Server Side Include: Mithilfe von Common Gateway Interfaces können Textinhalte dynamisch in die Website geladen werden.
  • Software-Tests: Entwickler können CGI-Skripte einsetzen, um die Funktion von externen Online-Anwendungen für Websites über den Browser zu testen. (Lesen Sie hierzu auch unseren Artikel zum Thema Modultests)

Ob gerade ein Skript ausgeführt wird, ist auch für den Anwender ohne Programmierkenntnisse, ganz einfach an der URL erkennbar. Über eine bestimmte Zeichenkette, die dort codiert ist, erhält der Server alle relevanten Informationen aus dem Skript. Es lassen sich drei Methoden der Datenübermittlung unterscheiden:

  • QUERY_STRING: Die Methode wird meist bei Nutzeranfragen verwendet.
  • PATH_INFO: Über diese Methode werden Kontextinformationen zur Website übermittelt.
  • Stdin: Auf diese Weise werden sonstige Nutzereingaben verarbeitet.

Vor- und Nachteile des Common Gateway Interface

Das Common Gateway Interface gehört trotz seines Alters zu den am häufigsten verwendeten Schnittstellen in der Website-Entwicklung. Neben diversen Vorteilen hat die Technologie jedoch auch einige Nachteile.

Vorteile

CGI ist eine einfache und effektive Methode, um dynamische Website-Inhalte zu generieren. Gleichzeitig müssen CGI-Anwendungen nicht auf dem Server gespeichert werden, sodass keine Ressourcen unnötig verbraucht werden. Ganz praktisch betrachtet, spricht für das Common Gateway Interface auch, dass es mit verschiedenen Programmiersprachen kompatibel ist und sich auf diese Weise leicht in bestehende Infrastrukturen einbinden lässt. Und nicht zuletzt verursacht es als freier Standard keine Nutzungskosten, sondern ist für jeden Entwickler sofort einsatzbereit.

Nachteile

Zu den größten Schwächen des Common Gateway Interfaces zählt, dass zwar die Serverlast reduziert wird, die Antwortzeit der CGI-Anwendung jedoch teilweise recht lang ausfällt, weil das Programm bei jeder neuen Eingabe erneut gestartet werden muss. Gerade für Websites mit hohem Traffic kann es zum Problem werden, dass Server häufig nur eine bestimmte Anzahl von CGI-Anwendungen unterstützen und weitere eingehende Anfragen dann in eine Warteschleife geleitet bzw. abgewiesen werden.

Das Common Gateway Interface kann, wie andere Schnittstellen auch, ein Sicherheitsrisiko darstellen, wenn kein entsprechender Schutz eingerichtet ist. Über das CGI haben externe Programme theoretisch vollen Zugriff auf die Daten des Webservers. Klare Einschränkungen müssen deshalb eingerichtet werden, damit ein CGI-Skript keinen Schaden anrichten kann.

Alternativen zum Common Gateway Interface

In den vergangenen Jahren sind verschiedene andere Schnittstellentechnologien entwickelt worden, die auf CGI aufbauen, aber seinen Hauptnachteil zu beseitigen versuchen: dass bei jeder Nutzeranfrage ein Skript neu geladen werden muss.

ASP (Active Server Pages): ASP wurde von Microsoft zunächst für seine eigenen Server entwickelt, ist mittlerweile aber für viele Server erhältlich. Der ASP-Interpreter ist in den Webserver integriert, sodass kein neuer Prozess mehr für seine Nutzung gestartet werden muss. ASP-Befehle können direkt in die HTML-Seiten geschrieben werden. Wie CGI lässt sich auch ASP mit verschiedenen Programmiersprachen verwenden.

PHP: PHP gehört neben Perl zu den am weitesten verbreiteten Skriptsprachen im Web. Vieles, was ein CGI-Skript erreichen kann, kann auch PHP. Der PHP-Interpreter ist allerdings direkt in den Webserver integriert.

ColdFusion: ColdFusion wurde ursprünglich für Windows entwickelt, ist mittlerweile aber auch für verschiedene Unix-Plattformen verfügbar. Der ColdFusion Interpreter ist, wie die bei den bereits vorgestellten CGI-Alternativen, in den Webserver integriert. HTML-Seiten können mit vorhandenen Tags oder eigenen Kontrollelementen verändert werden. Darüber hinaus bietet ColdFusion Entwicklern eine Reihe von Standardfunktionalitäten.

FastCGI: Mit FastCGI können dynamische Anfragen vom Webserver direkt über eine Perl-Schnittstelle bearbeitet werden, ohne dass ein neuer Prozess gestartet werden muss. FastCGI ist weitgehend mit CGI kompatibel und wird von einer Vielzahl von Webservern unterstützt.