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. Dieser 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
HTTPS on
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING gzip
HTTP_ACCEPT_LANGUAGE en-US,en;q=0.5
HTTP_AUTHORIZATION
HTTP_CONNECTION Keep-Alive
HTTP_HOST rolfrost.de
HTTP_IF_MODIFIED_SINCE Tue, 17 Sep 2019 16:41:25 GMT
HTTP_USER_AGENT CCBot/2.0 (https://commoncrawl.org/faq/)
QUERY_STRING
REDIRECT_HTTPS on
REDIRECT_HTTP_AUTHORIZATION
REDIRECT_SSL_TLS_SNI rolfrost.de
REDIRECT_STATUS 200
REDIRECT_UNIQUE_ID XczRnFfteYkAAEQfQawAAAAH
REDIRECT_URL /cgi.html
REMOTE_ADDR 35.172.150.239
REMOTE_PORT 46740
REQUEST_METHOD GET
REQUEST_URI /cgi.html
SERVER_ADDR 87.237.121.137
SERVER_ADMIN [no address given]
SERVER_NAME rolfrost.de
SERVER_PORT 443
SERVER_PROTOCOL HTTP/1.1
SERVER_SIGNATURE
SERVER_SOFTWARE Apache
SSL_TLS_SNI rolfrost.de
UNIQUE_ID XczRnFfteYkAAEQfQawAAAAH

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. nmq​rstx-18­@yahoo.de