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

DOCUMENT_ROOT /home/html
GATEWAY_INTERFACE CGI/1.1
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING x-gzip, gzip, deflate
HTTP_AUTHORIZATION
HTTP_HOST rolfrost.de
HTTP_IF_MODIFIED_SINCE Sat, 19 Aug 2017 22:31:29 GMT
HTTP_USER_AGENT CCBot/2.0 (http://commoncrawl.org/faq/)
PATH /bin:/usr/bin
QUERY_STRING
REDIRECT_HTTP_AUTHORIZATION
REDIRECT_STATUS 200
REDIRECT_UNIQUE_ID WeVN4lfteYkAABjWr4EAAAAG
REDIRECT_URL /cgi.html
REMOTE_ADDR 107.22.126.144
REMOTE_PORT 44776
REQUEST_METHOD GET
REQUEST_URI /cgi.html
SCRIPT_FILENAME /home/html/cgi-bin/fwdbf.cgi
SCRIPT_NAME /cgi-bin/fwdbf.cgi
SERVER_ADDR 87.237.121.137
SERVER_ADMIN [no address given]
SERVER_NAME rolfrost.de
SERVER_PORT 80
SERVER_PROTOCOL HTTP/1.0
SERVER_SIGNATURE
SERVER_SOFTWARE Apache
UNIQUE_ID WeVN4lfteYkAABjWr4EAAAAG

Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.