Zum Inhalt springen

Common Gateway Interface

aus Wikipedia, der freien Enzyklopädie

Vorlage:Hinweisbaustein Das Common Gateway Interface (CGI) ist eine Schnittstelle für den Datenaustausch zwischen einem Webserver (Anwendungsprogramm) und dritter Software, die Anfragen bearbeitet.<ref name="RFC" /> CGI ist eine Variante, Webseiten dynamisch bzw. interaktiv zu machen. Entwickelt wurde die Technologie am National Center for Supercomputing Applications (NCSA) und wird seit 1993 im World Wide Web eingesetzt.<ref name="RFC" /><ref name="History" />

Funktionsweise[Bearbeiten]

Ausgehend von einer HTTP-Anfrage kann durch den Webserver via CGI ein Prozess gestartet werden. Dabei können Informationen als Parameter an den Prozess übergeben werden. Diese können beispielsweise aus Benutzereingaben aus einem Webformular bestehen. Die Ausgaben des Prozesses werden wiederum an den Webserver übergeben, der darauf basierend eine HTTP-Antwort erzeugen kann.<ref name="Walter_2008" /> Optional können Daten bei laufenden Prozessen auch über die Standard-Datenströme zwischen Prozess und Webserver ausgetauscht werden.<ref name="Apache" />

Zur Nutzung dieser Funktion stellen Webserver entsprechende Subroutinen, Bibliotheken, Skripte oder Programme, sowie einige Umgebungsvariablen, zur Verfügung. Die folgenden neun Umgebungsvariablen müssen dabei verpflichtend vorhanden sein:<ref name="RFC" />

  1. GATEWAY_INTERFACE
  2. QUERY_STRING
  3. REMOTE_ADDR
  4. REQUEST_METHOD
  5. SCRIPT_NAME
  6. SERVER_NAME
  7. SERVER_PORT
  8. SERVER_PROTOCOL
  9. SERVER_SOFTWARE

Vorteile[Bearbeiten]

Statt nur statische Seiten von einem Webserver zu laden, die dort als fertige Ressource zur Verfügung stehen, ist es mit CGI auch möglich, Webinhalte (HTML-Seiten oder -Fragmente, Grafiken, PDF-Dokumente etc.) dynamisch zu erzeugen. Das bedeutet, dass diese zur Zeit der Anfrage noch nicht auf dem Server existieren müssen, sondern vom CGI-Programm erzeugt werden können. Grundsätzlich können CGI-Programme in einer beliebigen Programmiersprache geschrieben sein, die das Betriebssystem unterstützt, sofern die zuvor genannten Anforderungen erfüllt werden.<ref name="NCSA" />

Nachteile[Bearbeiten]

Ein Nachteil der CGI-Ausführung ist neben dem Sicherheitsrisiko, sofern kein entsprechender Schutz eingerichtet ist, ihre relativ geringe Geschwindigkeit, da für jeden CGI-Aufruf ein neuer Prozess gestartet wird. Zudem unterstützen viele Server nur eine limitierte Anzahl an CGI-Anfragen, weshalb viele Anfragen in Warteschlangen bleiben oder sogar abgewiesen werden.

Alternativen, die auf CGI aufbauen, jedoch das Bootstrapping der Prozesse umgehen können, sind z. B. FastCGI, ASP, PHP und ColdFusion.

Daneben gibt es Module, z. B. für den Apache-Webserver, die den Interpreter für verschiedene Skriptsprachen (z. B. mod_perl für Perl, mod_python für Python etc.) direkt in den Webserver-Prozess einbinden. Dieser wird so nur einmal beim Start des Webservers geladen, anstatt bei jeder Anfrage neu. Die Programme weiterhin als externe Prozesse laufen zu lassen, ihnen die Anfragen jedoch per FastCGI zu übergeben, ist der Lösungsweg, der dem CGI-Prinzip am ehesten treu bleibt. Hierbei kann, anders als bei der o. g. Einbindung als Apache-Modul, nicht nur der Interpreter der Programmiersprache dauerhaft laufen. Auch die Anwendung selbst kann die ganze Zeit geladen bleiben und so die eingehenden Anfragen noch effizienter bearbeiten.

Sicherheit[Bearbeiten]

Dass Programme, die ein Dritter erstellt hat, auf dem Webserver ausgeführt werden können, ist in höchstem Maße sicherheitsrelevant. Daher muss sichergestellt sein, dass ein über CGI gestartetes Programm nur bestimmte, eingeschränkte Typen von Programmroutinen ausführen darf (z. B. kein Löschen von Dateien des Webservers u. ä.).

Bei dem Apache-Webserver wird die Ausführung von CGI-Programmen mit Hilfe des Modules mod_suexec gegen solche Cracker-Angriffe gesichert, die das Eindringen als Root-User zum Ziel haben. Die Sicherheitsmaßnahmen sind dabei mehrstufig aufgebaut und so streng, dass viele Server-Administratoren dazu übergegangen sind, auch andere serverseitige Sprachen über CGI laufen zu lassen.

Siehe auch[Bearbeiten]

Weitere serverseitige Technologien[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references> <ref name="RFC"> Vorlage:RFC-Internet </ref> <ref name="History"> Richard MacManus: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive) </ref> <ref name="NCSA"> [Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden.] National Center for Supercomputing Applications, archiviert vom Vorlage:Referrer (nicht mehr online verfügbar) am 9. April 2009; (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.). </ref> <ref name="Walter_2008"> Der BibISBN-Eintrag [[Vorlage:BibISBN/Skriptfehler: Ein solches Modul „URIutil“ ist nicht vorhanden.]] ist nicht vorhanden. Bitte prüfe die ISBN und lege ggf. einen [[[:Vorlage:Neuer Abschnitt/URL]] <span title="Vorlage:bibISBN/Skriptfehler: Ein solches Modul „URIutil“ ist nicht vorhanden. (Seite nicht vorhanden)">neuen Eintrag] an. </ref> <ref name="Apache"> Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Apache HTTP Server Version 2.4Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive) </ref> </references>

<templatestyles src="Erweiterte Navigationsleiste/styles legacy.css" />Vorlage:Klappleiste/Anfang

Protokolle

CGI | SCGI | FastCGI | AJP

APIs

C NSAPI | C ASAPI | C ISAPI | Jakarta Servlet | ASP.NET | Python WSGI | Ruby Rack | JavaScript JSGI | PSGI | Lua WSAPI 

Apache-Module

mod_jk | mod_lisp | mod_parrot | mod_perl | mod_php | mod_python | mod_wsgi | mod_ruby | Phusion Passenger 

Web APIs

WSDL | XML-RPC | SOAP | REST 

Vorlage:Klappleiste/Ende