Einfache gemeinsame Gateway -Schnittstelle
Das Einfache gemeinsame Gateway -Schnittstelle (Scgi) ist ein Protokoll für Anwendungen zur Schnittstelle mit Http Server als Alternative zur CGI Protokoll. Das ist vergleichbar mit Fastcgi ist jedoch so konzipiert, dass sie leichter analysieren ist. Im Gegensatz zu CGI ermöglicht es einen langjährigen Serviceprozess, um weiterhin Anforderungen zu erstellen, wodurch Verzögerungen bei der Beantwortung von Anfragen aufgrund von Overhead (z. B. eine Verbindung zu einer Datenbank) vermieden werden.
Scgi ist a Protokoll was definiert Kommunikation zwischen einem Webserver und einem Anwendungsserver. Dies steht im Gegensatz zu CGI, einem früheren Anwendungsschnittstellen (Gateway), mit dem der Anwendungsprogrammierer die Komplexität von Sockets und langlebigen Serviceprozessen vermeiden kann, wenn eine schlechte Skalierbarkeit und hohe Overhead akzeptabel sind.
Das SCGI -Protokoll nutzt die Tatsache, dass der Webserver die HTTP -Anforderung bereits analysiert und validiert hat und die Anforderung kanonisch an den SCGI -Server übermittelt, während der Anwendungsprogrammierer vermieden wird, Mehrdeutigkeiten und Protokollkantenfälle zu analysieren. Dies vermeidet die komplizierten Regeln für Header-Parsing- und Header-Kombinieren von RFC 2616, was eine erhebliche Komplexität im SCGI-Serverprozess spart.
Geschichte
Neil Schemauer veröffentlichte die ursprüngliche SCGI -Protokollspezifikation vom Oktober 2001.[1] Er entwickelte die ersten Implementierungen von SCGI und veröffentlichte sie zunächst im April 2002.[2]
Spezifikation
Der Client stellt eine Verbindung zu einem SCGI-Server über ein zuverlässiges Stream-Protokoll her, das die Übertragung von 8-Bit-Bytes ermöglicht. Der Kunde sendet mit einer Anfrage. Wenn der SCGI -Server das Ende der Anforderung sieht, sendet er eine Antwort zurück und schließt die Verbindung. Das Format der Antwort wird durch dieses Protokoll nicht spezifisch angegeben, obwohl im Allgemeinen cgi-äquivalente HTTP-Antworten verwendet werden.[Anmerkung 1]
Forderungsformat
Eine SCGI -Anfrage ist die Verkettung von Netstring-Codierte Header und ein Körper. Eine SCGI -Reaktion ist eine normale HTTP -Reaktion.
Jeder Kopfball besteht aus a Name -Wert -Paar, wo sowohl der Name als auch der Wert sind Null-terminierte Saiten (C Strings). Der Wert kann ein sein leerer StringIn diesem Fall bleibt der Kündigungsnull noch. Weder Name noch Wert können eingebettete enthalten Null -Bytes. Diese Überlegungen sind Standard für C-Zeichenfolgen, sind jedoch häufig für Programmierer, die an andere Standards für die Stringhandling verwendet werden, verwirrend.
Alle bereitgestellten Header sind verkettet Um eine einzelne Bytesequenz zu bilden, dann Netstring-codiert. Der rohe Körper wird, falls vorhanden, dann angehängt.
Duplizierte Namen sind in den Anforderungsheadern nicht zulässig. RFC 2616-konforme Header kombiniert[Anmerkung 2] Muss bereits stattgefunden haben. Der erste Anforderungsheader muss den Namen "content_length" und einen Wert haben, der die Länge des Körpers in der Dezimalzahl ist. Der Anforderungsheader "Content_Length" muss immer vorhanden sein, auch wenn sein Wert "0" ist. Es muss auch immer einen Anforderungs -Header mit dem Namen "SCGI" und einem Wert von "1" geben. Standard -CGI Umgebungsvariablen sollte in SCGI -Headern zur Kompatibilität bei der Konvertierung älterer CGI -Programme in SCGI bereitgestellt werden. Die in der Anfrage bereitgestellte Körperschaft (falls vorhanden) folgt den Header; Die Länge wird durch den Anforderungsheader "content_length" angegeben.
Während das SCGI-Protokoll den Serviceprogrammierer aus einigen HTTP-Überlegungen, verschiedene Details (z. B. die Interpretation der Oktetten des Nachrichtenkörpers gemäß dem Übertragungs-kodierenden Header, isoliert, ist die Anzahl der Oktetten, nachdem der Körper für die Übertragung kodiert wurde, usw. .) Erfordern immer noch die Kenntnis der HTTP -Protokollspezifikation.
Beispiel
Der Webserver (ein SCGI -Client) öffnet eine Verbindung und sendet die Verkettung der folgenden Zeichenfolgen an den Serviceprozess (einen SCGI -Server):
"70:" "content_length" <00> "27" <00> "scgi" <00> "1" <00> "request_method" <00> "post" <00> "Request_uri" <00> "/DeeptHoughd" " <00> "," "Was ist die Antwort auf das Leben?"
Der SCGI -Server sendet die folgende Antwort an den Webserver zurück:
"Status: 200 OK" <0d 0a> "Inhaltstyp: Text/Plain" <0d 0a> "" <0d 0a> "42"
Der SCGI -Server schließt die Verbindung.
Webserver, die SCGI implementieren
(Diese Liste ist nicht abgeschlossen)
- Apache HTTP Server
- Cherokee
- LightTpd
- Microsoft Internetinformationsdienste mit ISAPI SCGI -Erweiterung
- nginx
Sprachbindungen für die SCGI -API
SCGI kann in jeder Sprache implementiert werden, die unterstützt Netzwerkstücken und NetStrings. Das Folgende ist eine Teilliste von Sprachen mit bekannten SCGI -Bindungen:
- Kobra
- D, mit dem arsd.cgi Bibliothek
- Haskell
- Java, mit dem SCGI -Anschluss oder mit dem [1] Bibliothek
- Lispeln
- Perl, mit dem Scgi Paket oder Plack Rahmen
- Php
- Python
- Schläger, mit dem scgi Bibliothek
- Rubin
- Rost, mit dem Tokio-scgi Kiste
- Planen
- Tcl
- Nim
Siehe auch
Anwendungs-/Gateway -Protokolle:
- Gemeinsame Gateway -Schnittstelle (CGI) - Startet einen Kinderprozess pro Anfrage
- Fastcgi -Versuche, die Skalierbarkeit zu erhöhen, indem langjährige CGI-ähnliche Prozesse unterstützt werden
- Apache JServ Protocol - Ein binäres Protokoll für Proxy -Anforderungen zwischen einem Webserver und einem Anwendungsserver.
Anwendungshosts (sprachspezifisch):
- Gestell - Rubin Webserverschnittstelle
- PSGI - Perl Webserver -Gateway -Schnittstelle
- WSGI - Python Webserver -Gateway -Schnittstelle
- JSGI – JavaScript Webserver -Gateway -Schnittstelle
Anmerkungen
- 1. ^ Das Spezifikationsdokument wurde am 12. Januar 2006 von Neil Schemauer öffentlich bekannt.
- 2. ^ Für HTTP -Header kombinieren siehe RFC2616 Abschnitt 4.2.
Verweise
- ^ Schemauer, Neil (30. Oktober 2001). "SCGI: Eine einfache allgemeine Alternative der Gateway -Schnittstelle". Archiviert von das Original Am 2002-04-03.
- ^ "scgi-0.1.tar.gz". Index von/Software/Dateien/SCGI. MNX: MEMS- und Nanotechnologieaustausch. 12. April 2002. Archiviert von das Original Am 2002-10-20.