CGI

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Das Common Gateway Interface (CGI) beschreibt Daten und Verfahren, mit denen ein Webserver die Ausführung eines Requests an ein externes Programm delegieren kann.[1] Bei diesem Programm kann es sich um ein Script (CGI-Script) oder ein kompiliertes Programm handeln. Die Requestdaten stehen dem CGI-Programm üblicherweise als Umgebungsvariablen zur Verfügung und können gezielt abgefragt werden:

Die Daten setzen sich aus verschiedenen Quellen zusammen:

  • allgemeine Informationen über den Webserver (Name, Serversoftware)
  • allgemeine Informationen über das ausgeführte Script
  • aufbereitete Informationen über den aktuellen Webrequest. Dazu gehören Kommunikationdaten, eine möglicherweise vorhandene Benutzerauthentifizierung und teilweise interpretierte Bestandteile der aufgerufenen URL.

CGI definiert einen Basissatz an Serverinformationen. Die tatsächlich vorhandenen Informationen können weitaus umfangreicher sein. Welche das sind, finden Sie in der Dokumentation zur verwendeten Webserver-Software.

CGI-Programme werden üblicherweise neben dem Document-Root in einem Verzeichnis namens cgi-bin abgelegt. Sie müssen auf dem Server ausführbar sein, d.h. unter Unix/Linux/macOS das so genante x-Bit gesetzt haben. In Skript-Programmem muss zudem die erste Zeile als Shebang-Zeile den Pfad zum Interpreter enthalten.

Request

Daten, die per GET übermittelt werden, sind Inhalt der Variablen QUERY_STRING. PHP (und einige andere Frameworks in verschiedenen Programmiersprachen) stellen diese Daten praktischerweise als Schlüssel-Wert-Paare zur Verfügung, so dass aus

?schluessel=wert&noch=etwas

so etwas wird wie

GET = {
    'schluessel': 'wert',
    'noch':       'etwas'
}
Beachten Sie: Der gleiche Schlüssel darf und kann mehrfach im Query-String vorkommen. Werden die URL-Parameter in einer simplen Hash-Tabelle/-Map abgelegt (wie in PHP), ist unter einem Schlüssel nur der letzte Wert vorhanden und nicht alle. Deswegen verwenden mit PHP erstellte Webseiten für solche Schlüssel die Schreibweise name[], PHP erzeugt daraufhin unter dem Schlüssel "name" ein Array mit einem Eintrag für jeden mit diesem Schlüssel übergebenen Wert.

Daten, die per POST übermittelt werden, bekommt das CGI-Skript auf der Standardeingabe (STDIN). Die CGI-Variable CONTENT_LENGTH gibt dabei die Länge des Datenstroms an und CONTENT_TYPE den MIME-Type der Daten. Das Einlesen und Aufbereiten der POST-Daten wird Ihnen in Perl oder PHP ebenfalls abgenommen.

Response

Die Response des CGI-Programms muss eine gültige HTTP-Antwort und darf daher nicht leer sein. Neben dem HTTP-Statuscode ist das also die Angabe des Content-Type oder eine Weiterleitung mittels Location.

Die HTTP-Response-Header und der HTTP-Response-Body müssen durch eine Leerzeile voneinander getrennt sein.

Zugriffskontrolle

CGI-Programme können neben einer eigenen, benutzerdefinierten Zugriffskontrolle durch Senden und Verarbeiten entsprechender HTTP-Header, auch durch die Server-Konfiguration mittels HTTP Authentication geschützt werden, indem bei Verwendung des Apache-Webservers eine entsprechende .htaccess im cgi-bin-Verzeichnis abgelegt wird.[2]

Quelle

  1. RFC 3875 -- The Common Gateway Interface (CGI) Version 1.1
  2. SELFHTML-Forum: Passwortschutz (02.07.2001)