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.
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.
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.
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 | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
HTTP_ACCEPT_ENCODING | br,gzip |
HTTP_ACCEPT_LANGUAGE | en-US,en;q=0.5 |
HTTP_CONNECTION | Keep-Alive |
HTTP_HOST | rolfrost.de |
HTTP_IF_MODIFIED_SINCE | Thu, 01 Dec 2022 12:48:00 GMT |
HTTP_USER_AGENT | CCBot/2.0 (https://commoncrawl.org/faq/) |
QUERY_STRING | |
REDIRECT_STATUS | 200 |
REDIRECT_UNIQUE_ID | ZHt4jFfteYkAAGsVmhAAAAAU |
REDIRECT_URL | /cgi.html |
REMOTE_ADDR | 35.172.111.47 |
REMOTE_PORT | 54588 |
REQUEST_METHOD | GET |
REQUEST_URI | /cgi.html |
SERVER_ADDR | 87.237.121.137 |
SERVER_ADMIN | [no address given] |
SERVER_NAME | rolfrost.de |
SERVER_PORT | 80 |
SERVER_PROTOCOL | HTTP/1.1 |
SERVER_SIGNATURE | |
SERVER_SOFTWARE | Apache |
UNIQUE_ID | ZHt4jFfteYkAAGsVmhAAAAAU |
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. sos@rolfrost.de und wenn Sie möchten daß mein Prepaid nicht verfällt dürfen Sie mich auch gerne anrufen 01625 26 40 76.