Jednoduché rozhraní společné brány - Simple Common Gateway Interface
![]() | tento článek potřebuje další citace pro ověření.Října 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
The Jednoduché rozhraní společné brány (SCGI) je protokol pro rozhraní aplikací s HTTP jako alternativu k serverům CGI protokol. Je to podobné jako FastCGI ale je navržen tak, aby se dal snadněji analyzovat. Na rozdíl od CGI umožňuje dlouhodobému procesu služby pokračovat v poskytování požadavků, čímž se vyhne zpožděním v reakci na požadavky kvůli režii instalace (například připojení k databázi).
SCGI je protokol který definuje sdělení mezi webovým serverem a aplikačním serverem. To je na rozdíl od CGI, což je dřívější aplikace (brána ) rozhraní navržené tak, aby umožňovalo aplikačnímu programátorovi vyhnout se složitosti soketů a dlouhotrvajících servisních procesů, když je přijatelná špatná škálovatelnost a vysoká režie.
Protokol SCGI využívá skutečnost, že klient již analyzoval a ověřil požadavek HTTP, a kanonicky komunikuje požadavek se serverem SCGI a zároveň umožňuje aplikačnímu programátorovi vyhnout se analýze nejasností a okrajových případů protokolu. Tím se vyhnete komplikovaným pravidlům pro analýzu záhlaví a kombinování záhlaví RFC2616, což šetří významnou složitost procesu serveru SCGI.
Dějiny
Neil Schemenauer zveřejnil původní specifikaci protokolu SCGI z října 2001.[1] On vyvinul první implementace SCGI a původně je publikoval v dubnu 2002.[2]
Specifikace
Klient se připojuje k serveru SCGI přes spolehlivý protokol streamu, který umožňuje přenos 8bitových bajtů. Klient začíná zasláním žádosti. Když server SCGI uvidí konec požadavku, odešle zpět odpověď a ukončí připojení. Tento protokol specificky neurčuje formát odpovědi, ačkoli se obecně používají odpovědi HTTP ekvivalentní CGI.[poznámka 1]
Formát žádosti
Požadavek SCGI je zřetězení z síťový řetězec -kódované záhlaví a tělo. Odpověď SCGI je normální odpověď HTTP.
Každá hlavička se skládá z a dvojice název-hodnota, kde jsou jak název, tak hodnota řetězce zakončené nulou (C struny ). Hodnota může být prázdný řetězec, v takovém případě koncová null stále zůstává. Název ani hodnota nesmí obsahovat žádné vložené položky nulové bajty. Tyto úvahy jsou standardní pro řetězce C, ale často jsou matoucí pro programátory používané v jiných standardech pro zpracování řetězců.
Všechny poskytnuté záhlaví jsou zřetězené pak vytvoříte jednobajtovou sekvenci síťový řetězec -kódováno. Surové tělo, pokud existuje, je poté připojeno.
V záhlavích žádosti nejsou povoleny duplicitní názvy; RFC2616 -kompatibilní kombinování hlaviček[poznámka 2] se již muselo uskutečnit. Záhlaví prvního požadavku musí mít název „CONTENT_LENGTH“ a hodnotu, která je délkou těla v desítkové soustavě. Záhlaví požadavku „CONTENT_LENGTH“ musí být vždy k dispozici, i když je jeho hodnota „0“. Rovněž musí vždy existovat záhlaví požadavku se jménem „SCGI“ a hodnotou „1“. Standardní CGI proměnné prostředí by měly být v hlavičkách SCGI poskytovány kvůli kompatibilitě při převodu starších programů CGI na SCGI. Tělo (pokud existuje) uvedené v žádosti následuje za záhlaví; jeho délka je určena hlavičkou požadavku „CONTENT_LENGTH“.
Zatímco protokol SCGI izoluje programátora služby od některých úvah HTTP, různých podrobností (například interpretace oktetů těla zprávy podle záhlaví Transfer-Encoding, přičemž CONTENT_LENGTH je počet oktetů poté, co bylo tělo kódováno pro přenos atd. .) stále vyžadují znalost specifikace protokolu HTTP.
Příklad
Webový server (klient SCGI) otevře připojení a odešle zřetězení následujících řetězců do procesu služby (server SCGI):
"70:" "CONTENT_LENGTH" <00> "27" <00> "SCGI" <00> "1" <00> "REQUEST_METHOD" <00> "POST" <00> "REQUEST_URI" <00> "/ hluboký nápad" <00> "," "Jaká je odpověď na život?"
Server SCGI odešle následující odpověď zpět na webový server:
„Status: 200 OK“ <0d 0a> „Content-Type: text / plain“ <0d 0a> “„ <0d 0a> „42“
Server SCGI uzavře připojení.
Webové servery, které implementují SCGI
(tento seznam není úplný)
- Apache HTTP Server
- Čerokee
- Lighttpd
- Microsoft Internetová informační služba s Rozšíření ISAPI SCGI
- nginx
Jazykové vazby pro SCGI API
SCGI lze implementovat v jakémkoli jazyce, který podporuje síťové zásuvky a síťové struny. Následuje částečný seznam jazyků se známými vazbami SCGI:
- Kobra
- D, s arsd.cgi knihovna
- Haskell
- Jáva, s SCGI konektor
- Lisp
- Perl, s SCGI balíček nebo Plack rámec
- PHP
- Krajta
- Raketa, s scgi knihovna
- Rubín
- Rez, s tokio-scgi bedna
- Systém
- Tcl
- Nim
Viz také
Aplikační / Gatway protokoly:
- Common Gateway Interface (CGI) - Spustí proces dítěte na žádost
- FastCGI - Pokusy o zvýšení škálovatelnosti podporou dlouhotrvajících procesů podobných CGI
- Apache JServ Protocol - Binární protokol určený k proxy žádostem mezi webovým serverem a aplikačním serverem.
Hostitelé aplikace (specifické pro jazyk):
- Nosič - Rubín rozhraní webového serveru
- PSGI - Perl Rozhraní brány webového serveru
- WSGI - Krajta Rozhraní brány webového serveru
- JSGI – JavaScript rozhraní brány webového serveru
Poznámky
- 1.^ Specifikační dokument zveřejnil Neil Schemenauer dne 12. ledna 2006 jako veřejné dílo.
- 2.^ Kombinování hlaviček HTTP viz RFC2616 oddíl 4.2.
Reference
- ^ Schemenauer, Neil (30. října 2001). „SCGI: Jednoduchá alternativa rozhraní společné brány“. Archivovány od originál dne 3. 4. 2002.
- ^ "scgi-0.1.tar.gz". Rejstřík / software / soubory / scgi. MNX: MEMS a výměna nanotechnologií. 12. dubna 2002. Archivovány od originál dne 2002-10-20.