< CGI

CGI áttekintése

Szerző: Sallai András

Copyright © Sallai András, 2012, 2013, 2015, 2017

Licenc: GNU Free Documentation License 1.3

Web: http://szit.hu

Bevezetés

A CGI a Common Gateway Interface szavak rövidítése, amelyet a NCSA (National Center for Supercomputing Applications) fejlesztett Perl, C és PHP programok számára. Egy protokoll szabvány, melynek segítségével egy rendszerhez kapcsolhatjuk a Perl, C és PHP vagy más programjainkat.

A CGI technológiát általában webszerver mellett használjuk, amelyen dinamikus weblapok generálása a cél. Jelenleg érvényes verziója: CGI/1.1.

Alternatívája a JavaServer Pages (Sun) vagy az Active Server Pages (Microsoft).

A web kezdeteinél csak ez a technológia adott lehetőséget az interaktív weblapok készítésére. A CGI nélkül a weboldalaink egyszerű statikus weboldalak. A CGI interaktívvá teszi a weboldalakt.

Az interaktív weboldalak által lehetőségeink bővülnek:

feldolgozható adatok

tárolható adatok

elérhető adatbázisok

Amivel foglalkozunk:

webes alkalmazások

CGI rövid története

a CGI program meghatározása

hogyan működik a CGI?

érvek és ellenérvek a CGI mellett

programozási nyelvek a CGI-ban

A webes alkalmazás olyan mint bármely más alkalmazás. Kivéve, hogy csak böngészőn keresztül érhető el. A webes alkalmazások eredetileg fórumok, webáruházak, visszajelzést megvalósító webhelyek voltak. Ma már azonban sok asztali alkalmazás megvalósításra került a webes világban. Olyanok mint rajzolás, irodai alkalmazások, térkép szolgáltatások, határidő naplók, stb.

A JavaScript segítségével növelhetjük egy weboldal interaktivitást, képeket tologathatunk, legördülő menüket alkothatunk, eseményeket kezelhetünk, animációkat készíthetünk.

A CGI története

Az első webszerverek egyike a NCSA HTTPD volt. A gyártó National Center for Supercomputing Applications, ahol a Netscape legtöbb alapítója is dolgozott. A Netscape dolgozat ki a Mosaic böngészőt. A NCSA HTTPD egyik legfontosabb tulajdonsága a CGI volt, amely a szerver 1.0-ás kiadásában már jelen volt.

A CERN szervere mellett az NCSA HTTPD volt az egyik széles körben használt webszerver, így CGI de facto szabvánnyá vált.

Megjegyzés: CERN httpd az első webszerver, amelyet Tim Berners-Lee, Ari Luotonen és Henrik Frystyk Nielsen készített, 1990-től (A CERN-nél). 1990 karácsony napján ment élseben. Eredetileg NeXT Computer-on fejlesztették, amelyen NeXTSTEP operációs rendszer futott. A CERN httpd később a W3C fejleszti tovább. Az utolsó kiadás a 3.0A verzió volt, 1996-ban. Később átírják Unixra.

A NCSA HTTPd a CERN httpd szerver után, valamikor a 90-es évek elején kezdik fejleszteni, az utolsó kiadása szintén 1996. Fejlesztője Robert McCool.

Az NCSA HTTPD alapkódját átvette az Apache projekt. Ez után még az NCSA HTTPD szervernek megjelent az 1.5-s kiadása, utoljára. Ebben az időben a webszerverek 95%-a NCSA HTTPD. Később mindenki Apache-ra váltott.

Azóta az NCSA HTTPD kódrész eltávolították az Apacheból, újraírták. 2011-ben már webszerverek 60%-a Apache.

http://en.wikipedia.org/wiki/Comparison_of_web_server_software

Abban az időben az NCSA HTTPD CGI megoldása volt az egyetlen lehetőség interaktív weboldalak készítésére. Ennek és a nyílt forráskódjának köszönhetően népszerű lett. Ma az összes webszer támogatja a CGI-t. Néhány hasonló webszerver alkalmazás a JavaServer Pages, a Microsoft's Active Server Pages, PHP, stb.

A CGI programról

A CGI programot a webszerver hajtja végre, és az eredményt visszaküldi a böngésző számára. A webszerver ebben a folyamatban közvetítőként működik. Szinte bármilyen programozási nyelven lehet CGI programot írni. A CGI programmal a felhasználónak nincs közvetlen kapcsolata. Nem jelenít meg grafikus felületet, bár lehet vele képeket generálni.

Egy CGI programnak a következőknek kell megfelelnie:

A parancs egyszerűen begépelhető kell legyen parancssorban.

A Java programok például nem teljesen alkalmasak erre

A programnak létre kell hozni egy érvényes content-type fejrészt.

A CGI program kimenete bármilyen típusú tartalom lehet:

HTML kód, képek, szöveges fájlok, word dokumentum, hangfájl, stb.

A content-type sorral mondjuk meg, milyen típusú tartalmat küldünk.

Hogyan működnek a CGI programok

A CGI megismeréséhez szükséges a unix alapú operációs renszerek fogalmainak ismerete. A CGI tehát egy webszerveren keresztül kommunikál a felhasználóval.

Ha egy egyszerű statikus HTML oldalt kell feldolgozni, akkor az URL a következőhöz hasonló lehet:

http://zold.and/konyvtarnev/index.html

A webszerver fájlrendszerének szintjén ez megfelelhet például a következőnek:

/home/virtual-www/zold.and/htdocs/konyvtarnev/index.html

A webszerver gyökere az URL szintjén a következő:

http://zold.and

A webszerver fájlrendszerének szintjén:

/home/virtual-www/zold.and/htdocs/

Amikor az URL-ben egy CGI programra hivatkozunk, az a következő lehet: http://zold.and/cgi-bin/pelda.cgi

Az esetünkben pelda.cgi nevű CGI programot kéri egy kliens. Miután a webszerver megállapítja, hogy a kért erőforrás egy CGI program, végrehajtja azt és visszaadja a kimenetét a kliensnek.

A webszerverenk több dolgot kell figyelembe vennie.

Hol található a kért erőforrás?

A kért erőforrás egy CGI program?

A program végrehajtható?

A program hiba nélkül végrehajtható?

A program kimenet egy érvényes HTML oldal?

Ha a válasz mindegyikre igen, akkor a kérés teljesítésre kerül. Ha nem, akkor a webszerver hibát ad vissza.

A kérés teljesítése

Mint azt fentebb írtam, a CGI programnak meg kell adnia, hogy a visszaadott tartalom milyen típusú lesz, egy ContentType fejléc sorral. Más esetekben a kiszolgáló a típust a kiterjesztésből veszi. Itt viszont ez .cgi, amely különféle tartalmakat generálhat. A típust a MIME szabvánnyal adjuk meg.

MIME típusok kivonata
text/html	HTML dokumentum
text/plain	Szöveges dokumentum
image/jpeg	JPEG kép
image/png	PNG kép
image/gif	GIF kép
vodeo/mp4	MPEG4 vidó
application/octet-stream	Bináris fájl

Ha a CGI által generált tartalom egy HTML oldal, akkor a content-type fejléc tartalma:

Content-type: text/html

Ezt az információt a webszerver fogadja, majd más fejlécekkel együtt elküldi a böngészőnek.

Content-type: text/html
<!doctype html>
<html>
<head>
<title>cím</title>
<body>
Weboldal
</body>
</html>

Vegyük észre, hogy a Content-type sor két üres sorral van elválasztva a tartalomtól.

A webszerver ezzel együtt más fejlécsorokat is hozzá szokott adni:

200 OK
Connection: close
Date: Thu, 30 Feb 2015 19:49:05 CET
Server: Apache/2.4.18
Content-Type: text/html
Client-Date: Thu, 16 Feb 2015 19:49:05 CET
Client-Peer: 190.195.86.50:80
<!doctype html>
<html>
<head>
<title>cím</title>
<body>
Weboldal
</body>
</html>

Adatok átadása a CGI programnak

A CGI programok az adatokat webes űrlapokból veszik, vagy az URL-ben van kódolva.

Érvek és ellenérvek a CGI mellett

Előnyök

cross-platformos technika - a webszerver minden OS-en fut

nyelfüggetlen

például a Perl, Python minden OS-re van

nem szükséges speciális programozói könyvtárak használat

az alapértelmezett be- és kiemenetet használjuk

Hátrányok

ha script nyelvet használsz, futási időben mindig fordítani kell a programot.

akkor hatékony ha nem nagy a webszerver forgalma

persze meg lehet írni a programot C nyelven is

nem egyszerű a webprogramozó dolga a webszerveren, ha CGI programot akar írni

CGI programozási nyelvek

Perl

A Perl nyelv domináns szerepet tölt be a CGI programok írásánál. Ez nem jelenti azt, hogy ez a legjobb egy CGI program megírására, de ez a legelterjedtebb, ha CGI-ról van szó. Az elterjedését segítette, hogy azonnal szerkeszthető.

CGI.pm modul számos feladat ellátását könnyíti meg ha Perlt használunk. Sok Perl nyelven írt CGI program tölthető le az Internetről.

Unix Shell

Unix rendszereken gyakori választás. Általában olyanok választják, akik eleve ismerik a Shell programozást, például rendszergazdák. Más nyelvek alkalmasabbak általában komplex CGI program megírására, de Shell szinten sok hasznos parancs állhat eleve a rendelkezésünkre.

C nyelv

Fő szempont a Script nyelvekkel szemben, hogy nagyon jó teljesítménye van. A program végrehajtás kevesebb időt igényel.

A hátránya az, hogy nem CGI specifikus nyelv. A Perl nyelven egy-egy szövegfeldolgozási feladat sokkal kevesebb sorból megoldható, szemben a C-vel.

Hiba esetén újra kell fordítani a programot.

Python

Minden népszerű operációsrendszerre elérhető, mint a Perl nyelv. Általános célú, számos feladatra alkalmas, többek között CGI programozásra is. Számos webes alkalmazást hoztak létre Python nyelven.