Das Common Gateway Interface (CGI) ist eine Schnitt­stel­le von Web­ser­vern, über die stan­dar­di­sier­ter Da­ten­aus­tausch zwischen externen An­wen­dun­gen und Servern möglich ist. Sie gehört zu den ältesten Schnitt­stel­len­tech­no­lo­gien des Internets und wird bis heute häufig verwendet. Mit CGI müssen HTML-Seiten nicht voll­stän­dig auf dem Server be­reit­ste­hen, sondern werden dynamisch erzeugt, sobald ein Nutzer eine passende Anfrage über die Website stellt.

Funk­ti­ons­wei­se und Anwendung

Wenn ein Nutzer eine Eingabe auf einer Webseite vornimmt, werden diese Daten nicht direkt an den Server wei­ter­ge­lei­tet, sondern müssen zunächst noch be­ar­bei­tet werden. Diese Be­ar­bei­tung erfolgt über eine externe Software (bzw. ein CGI-Skript), nicht über den Webserver direkt. Das Programm über­mit­telt die Daten über die stan­dar­di­sier­te CGI-Schnitt­stel­le an den Server, der daraufhin die neu erzeugten In­for­ma­tio­nen in HTML dar­stel­len kann. CGI-Programme liegen in der Regel in einem eigenen Ordner auf dem Webserver.

Das CGI-Skript selbst kann in un­ter­schied­lichs­ten Pro­gram­mier­spra­chen verfasst werden. Das Common Gateway Interface sorgt dafür, dass – egal welche Sprache verwendet wird – Webserver und Skript mit­ein­an­der kom­mu­ni­zie­ren können.

An­wen­dungs­fäl­le von Common Gateway Interface

  • Wa­ren­kör­be: Legt ein Kunde Produkte in seinen Online-Ein­kaufs­korb, werden diese In­for­ma­tio­nen vom CGI-Skript ver­ar­bei­tet und an­schlie­ßend an den Server gesendet.
  • Kom­men­ta­re: Der Nutzer füllt ein Kom­men­tar­feld aus. Mit dem Klick auf „Senden“ wird sein Text an das CGI-Skript über­mit­telt, das diesen wiederum an den Server wei­ter­lei­tet.
  • Formulare: Auch bei On­line­for­mu­la­ren, z. B. für Be­wer­bun­gen oder Nach­rich­ten, werden die ein­ge­ge­be­nen Daten zunächst vom Common Gateway Interface ver­ar­bei­tet, ehe sie an den Server über­mit­telt werden.
  • Website-Sta­tis­ti­ken: Werden auf Websites Zu­griffs­zah­len angezeigt, nutzt die da­hin­ter­lie­gen­de Tech­no­lo­gie in vielen Fällen ebenfalls CGI.
  • Server Side Include: Mithilfe von Common Gateway In­ter­faces können Text­in­hal­te dynamisch in die Website geladen werden.
  • Software-Tests: Ent­wick­ler können CGI-Skripte einsetzen, um die Funktion von externen Online-An­wen­dun­gen für Websites über den Browser zu testen. (Lesen Sie hierzu auch unseren Artikel zum Thema Mo­dul­tests)

Ob gerade ein Skript aus­ge­führt wird, ist auch für den Anwender ohne Pro­gram­mier­kennt­nis­se, ganz einfach an der URL erkennbar. Über eine bestimmte Zei­chen­ket­te, die dort codiert ist, erhält der Server alle re­le­van­ten In­for­ma­tio­nen aus dem Skript. Es lassen sich drei Methoden der Da­ten­über­mitt­lung un­ter­schei­den:

  • QUERY_STRING: Die Methode wird meist bei Nut­zer­an­fra­gen verwendet.
  • PATH_INFO: Über diese Methode werden Kon­text­in­for­ma­tio­nen zur Website über­mit­telt.
  • Stdin: Auf diese Weise werden sonstige Nut­zer­ein­ga­ben ver­ar­bei­tet.

Vor- und Nachteile des Common Gateway Interface

Das Common Gateway Interface gehört trotz seines Alters zu den am häu­figs­ten ver­wen­de­ten Schnitt­stel­len in der Website-Ent­wick­lung. Neben diversen Vorteilen hat die Tech­no­lo­gie jedoch auch einige Nachteile.

Vorteile

CGI ist eine einfache und effektive Methode, um dy­na­mi­sche Website-Inhalte zu ge­ne­rie­ren. Gleich­zei­tig müssen CGI-An­wen­dun­gen nicht auf dem Server ge­spei­chert werden, sodass keine Res­sour­cen unnötig ver­braucht werden. Ganz praktisch be­trach­tet, spricht für das Common Gateway Interface auch, dass es mit ver­schie­de­nen Pro­gram­mier­spra­chen kom­pa­ti­bel ist und sich auf diese Weise leicht in be­stehen­de In­fra­struk­tu­ren einbinden lässt. Und nicht zuletzt ver­ur­sacht es als freier Standard keine Nut­zungs­kos­ten, sondern ist für jeden Ent­wick­ler sofort ein­satz­be­reit.

Nachteile

Zu den größten Schwächen des Common Gateway In­ter­faces zählt, dass zwar die Ser­ver­last reduziert wird, die Ant­wort­zeit 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-An­wen­dun­gen un­ter­stüt­zen und weitere ein­ge­hen­de Anfragen dann in eine War­te­schlei­fe geleitet bzw. ab­ge­wie­sen werden.

Das Common Gateway Interface kann, wie andere Schnitt­stel­len auch, ein Si­cher­heits­ri­si­ko dar­stel­len, wenn kein ent­spre­chen­der Schutz ein­ge­rich­tet ist. Über das CGI haben externe Programme theo­re­tisch vollen Zugriff auf die Daten des Web­ser­vers. Klare Ein­schrän­kun­gen müssen deshalb ein­ge­rich­tet werden, damit ein CGI-Skript keinen Schaden anrichten kann.

Al­ter­na­ti­ven zum Common Gateway Interface

In den ver­gan­ge­nen Jahren sind ver­schie­de­ne andere Schnitt­stel­len­tech­no­lo­gien ent­wi­ckelt worden, die auf CGI aufbauen, aber seinen Haupt­nach­teil zu be­sei­ti­gen versuchen: dass bei jeder Nut­zer­an­fra­ge ein Skript neu geladen werden muss.

ASP (Active Server Pages): ASP wurde von Microsoft zunächst für seine eigenen Server ent­wi­ckelt, ist mitt­ler­wei­le aber für viele Server er­hält­lich. Der ASP-In­ter­pre­ter ist in den Webserver in­te­griert, sodass kein neuer Prozess mehr für seine Nutzung gestartet werden muss. ASP-Befehle können direkt in die HTML-Seiten ge­schrie­ben werden. Wie CGI lässt sich auch ASP mit ver­schie­de­nen Pro­gram­mier­spra­chen verwenden.

PHP: PHP gehört neben Perl zu den am weitesten ver­brei­te­ten Skript­spra­chen im Web. Vieles, was ein CGI-Skript erreichen kann, kann auch PHP. Der PHP-In­ter­pre­ter ist al­ler­dings direkt in den Webserver in­te­griert.

Cold­Fu­si­on: Cold­Fu­si­on wurde ur­sprüng­lich für Windows ent­wi­ckelt, ist mitt­ler­wei­le aber auch für ver­schie­de­ne Unix-Platt­for­men verfügbar. Der Cold­Fu­si­on In­ter­pre­ter ist, wie die bei den bereits vor­ge­stell­ten CGI-Al­ter­na­ti­ven, in den Webserver in­te­griert. HTML-Seiten können mit vor­han­de­nen Tags oder eigenen Kon­troll­ele­men­ten verändert werden. Darüber hinaus bietet Cold­Fu­si­on Ent­wick­lern eine Reihe von Stan­dard­funk­tio­na­li­tä­ten.

FastCGI: Mit FastCGI können dy­na­mi­sche Anfragen vom Webserver direkt über eine Perl-Schnitt­stel­le be­ar­bei­tet werden, ohne dass ein neuer Prozess gestartet werden muss. FastCGI ist weit­ge­hend mit CGI kom­pa­ti­bel und wird von einer Vielzahl von Web­ser­vern un­ter­stützt.

Zum Hauptmenü