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:
Amivel foglalkozunk:
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.
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.
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 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 CGI program kimenete bármilyen típusú tartalom lehet:
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:
A webszerver fájlrendszerének szintjén ez megfelelhet például a következőnek:
A webszerver gyökere az URL szintjén a következő:
A webszerver fájlrendszerének szintjén:
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.
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.
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>
A CGI programok az adatokat webes űrlapokból veszik, vagy az URL-ben van kódolva.
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 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.
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.
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.