CGI/1.1 Der Standard Common Gateway Interface

RFC 3875: Standardinput, Standardoutput, STDIN, STDOUT und die Serverumgebung bilden das Gateway

Sinn und Zweck der CGI-Schittstelle ist es, sämtliche Request-Parameter einem dem Webserver nachgelagerten Prozess verfügbar zu machen. Damit wird die Übertragung HTTP/HTTPS transparent für nachgelagerte Prozesse. Ein solcher Prozess Prozess, nennen wir ihn CGI-Prozess, stellt die Response zusammen und schickt diese per CGI-Schnittstelle zurück zum Webserver. Wesentlich für die CGI-Schnittstelle ist, dass der Webserver alle für den nachgelagerten Prozess erforderliche Parameter in Umgebungsvariablen setzt.

Für Perl als CGI-Prozess ist die Serverumgebung im Hash %ENV zu finden. Als Common Gateway werden STDIN und STDOUT verstanden, so liest ein CGI-Prozess den HTTP-Message-Body soweit vorhanden aus STDIN und schickt die Response über STDOUT zurück in Richtung Webserver. Aus der Sicht des CGI-Prozesses ist der Webserver infolge dieser Schnittstelle transparent für die gesamte HTTP-Kommunikation vom Request bis zur Response.

NPH: Non Parsed Headers Prozesse

Ist NPH konfiguriert, zeigt sich der dem Webserver nachgelagerte CGI-Prozess selbst für das Ausliefern sämtlicher Response-Header zuständig einschließlich HTTP-gerechter Zeilenumbrüche nach dem Schema CRLFCRLF (CR: Carriage Return, LF: Line Feed). Ansonsten parst der Webserver die vom CGI-Prozess generierten Response-Header und vervollständig diese bis zur Auslieferung per HTTP an den Client (Browser, User-Agent).

Ebenso, wenn der Webserver die Header parst, werden vom CGI-Prozess erzeugte Zeilenumbrüche RFC-gerecht nach CRLF umgesezt. Das heißt, dass ein CGI-Prozess i.d.R. eine Leerzeile auch mit LFLF (zwei Zeilenvorschübe ohne Carriage Return) als Solche kenntlich machen darf und damit dem Webserver mitteilt, dass keine weiteren HTTP-Response-Header kommen und unmittlbar der Message-Body folgt.

Request-Header Content-Length

Lt. Standard CGI/1.1 wird dieser Header in die Umgebungsvariable CONTENT_LENGTH gesetzt. Ist diese im Header enthaltene Angabe größer als 0, heißt das, dass es einen Message-Body gibt, der aus STDIN zu lesen ist. CONTENT_LENGTH gibt an, wieviele Bytes (Oktetten) dafür zu lesen sind. Ein Message-Body darf Oktetten beliebiger Wertigkeiten von 0..255 enthalten (Binary).

Beachte: Gewöhnlich gibt es einen Message-Body für den CGI-Prozess dann, wenn als Request-Methode POST oder PUT gewählt wurde. Verbindlich jedoch ist die Angabe größer 0 in CONTENT_LENGTH dafür, dass Daten aus STDIN zu lesen sind.

Umgebungsvariable QUERY_STRING

Hierin sind diejenigen Daten enthalten, die einem URL anhänglich sind:

http://example.org/foo.html?id=123#Fragment
|     |           |         |
|     |           |         |QUERY_STRING
|     |           |
|     |           |Path
|     |
|     |Auth
|
|Scheme

Anmerkung: Der CGI/1.1-Standard stellt sicher, dass alle Bestandteile eines URI, außer dem optionalen Fragment, einem nachgelagerten CGI-Prozess zur Verfügung stehen.

Zur Laufzeit erstellt sehen Sie untenstehend die aktuelle Serverumgebung. All diese Umgebungsvariablen setzt der Webserver zur Verwendung der CGI-Schnittstelle nach Standard CGI/1.1. Variablen die mit HTTP beginnen, vermitteln Daten, welche der Request mitbringt, z.B. Informationen über den UserAgent und übermittelte Request-Header. Tipp: Setze einen QUERY_STRING

GATEWAY_INTERFACE CGI/1.1
HTTP_ACCEPT */*
HTTP_CONNECTION close
HTTP_HOST rolfrost.de
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_X_ACCEL_INTERNAL /internal-nginx-static-location
HTTP_X_REAL_IP 3.14.6.194
QUERY_STRING
REDIRECT_STATUS 200
REDIRECT_URL /cgi.html
REMOTE_ADDR 3.14.6.194
REMOTE_PORT 60168
REQUEST_METHOD GET
REQUEST_URI /cgi.html
SCRIPT_URI http://rolfrost.de/cgi.html
SCRIPT_URL /cgi.html
SERVER_ADDR 185.146.238.137
SERVER_ADMIN root@localhost
SERVER_NAME rolfrost.de
SERVER_PORT 80
SERVER_PROTOCOL HTTP/1.0
SERVER_SOFTWARE Apache
UNIQUE_ID Zipc86HJ8JzDILc-F@aJWAAAAIc

Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.