A InfoWiki wikiből
(uploaded) |
(uploaded) |
||
10. sor: | 10. sor: | ||
<path l1="cgi-ea/Nyitolap|Előadás" l2="cgi-ea/Tematika|Vizsga" l3="cgi-ea/Foliak|Fóliák" lx="-" | <path l1="cgi-ea/Nyitolap|Előadás" l2="cgi-ea/Tematika|Vizsga" l3="cgi-ea/Foliak|Fóliák" lx="-" | ||
l4="cgi-gy/Nyitolap|Gyakorlat"/> | l4="cgi-gy/Nyitolap|Gyakorlat"/> | ||
+ | |||
+ | == Dinamikus WEB és CGI == | ||
+ | |||
+ | Az Internet jelenlegi alapjait az ARPANET alapjaiból kinőtt, mindent átfogó számítógépes hálózat teremti. Az internet nem csak a WEB-ről szól, mivel a számítógépeket összekötő vezetékes és egyéb kapcsolatokon a számítógépek nem csak weblapokat és képeket cserélnek egymással, és nem csak a HTTP protokoll van használatban. Jelen esetben azonban csak a weblapok fejlesztéséről, azon belül is a web-es űrlapok feldolgozásáról lesz szó. | ||
+ | |||
+ | A weblapok jelenleg a HTML vagy XHTML leíró nyelveken készülnek. Ennek alapjait a CERN-ben vetették meg, mikor is a tudósok valamilyen dokumentum leíró nyelvet kívántak fejleszteni, melyen leírhatták gondolataikat, ötleteiket, és megoszthatták azt egymással. Kezdetben a HTML lapokat karakteres felületen jelenítették meg, de elterjedésével a grafikus felületű megjelenítők, ún. ''böngészők'' is megjelentek, melyek a HTML leírást képesek voltak megjeleníteni, és az interakciókat, a linkek aktiválását egérműveletekkel is támogatták. | ||
+ | |||
+ | A HTML lapok kezdetben jellemzően '''statikusak''' voltak. Ez azt jelenti, hogy a megjelenített tartalom egy text fájlhoz hasonló, html fájlban egyszerűen le volt gépelve, le volt írva, el volt mentve. A webszervertől a böngésző a fájlt lekérte, a tartalmát elolvasta, értelmezte, és megjelenítette. Amíg a dokumentum tulajdonosa a fájlhoz nem írt hozzá, nem nyúlt bele, minden lekérés ugyanazt a fájlt eredményezte, a böngésző minden egyes alkalommal ugyanazt mutatta a kliens oldalon. | ||
+ | |||
+ | Felmerült az igény, hogy a dokumentum tartalma időben automatikusan kövesse az változásokat. Legegyszerűbb példa: ha a html leírás elején ki volt írva a készítés dátuma, akkor jelenjen meg annak ''öregsége'', legyen kiírva hány nappal (héttel, hónappal) korábban készült az a dokumentum. Ehhez ne kelljen a szerkesztőnek minden nap megnyitni a dokumentumot, és átírni ezt az értéket, hanem ezen módosítás történjen meg automatikusan. Az adatbázisok elterjedésével megjelet az igény a tartalom adatbázisadatok alapján történő generálására is. Ekkor a dokumentumban esetleg szereplő pénzügyi adatok több valuta aktuális értéke alapján is kiszámíthatóak. | ||
+ | |||
+ | A dinamikusan generált weblapokat a webszerveren futtatott programok állították elő. Ezek egyszerű kis programok voltak, amelyek futásuk során a ''standard kimenet''re (Std Out) írták ki a html kimenetet. A webszerver ezen kis programokat a kliens oldali lekéréskor lefuttatta, és a kimenetet összegyűjtve elküldte azt a kliens oldalra. A kliens oldali böngészőt ehhez nem kellett módosítani, ugyanúgy webkérést küld statikus és dinamikus weblap lekérés esetén is, a visszaérkező html válaszon nem érezhető, hogy az statikus vagy dinamikus előállítású-e. | ||
+ | |||
+ | Ezzel meg is született a CGI programozás alapjai. A korábban leírt kis programok, melyek html output előállítására képesek - a CGI programok jellemzőit hordozzák. | ||
+ | |||
+ | Ezzel egyidőben merült fel igényként az is, hogy az adatbázisban tárolt értékeket web-es felületen lehessen megváltoztatni, ne kelljen minden egyes alkalommal adatbáziskezelő programot igénybe venni pl. a valuta-árfolyamok átírásához, lehessen ezt a webes html felület segítségével is megtenni. Ehhez szükséges volt, hogy a html segítségével ne csak információkat lehessen leírni, hanem adatokat is bekérni. A probléma azonban még csak most kezdődik: a bekért adatokat vissza kell tudni juttatni a webszerverre, és ott fel kell tudni dolgozni. A HTTP protokoll egyszerű bővítésével az adatok visszaküldése szerencsére megoldható volt. A feldolgozás a webszerveren szintén megoldható vált - az előzőekben említett egyszerű CGI programok nem csak a dinamikus html lapok generálását tudják elvégezni, hanem a webszerverre érkező adatokat elolvasva azokat ellenőrízni, feldolgozni, menteni adatbázisba. Ezen képességű programokat nevezzük ma CGI programoknak. | ||
+ | |||
+ | <box type="info">A CGI programok tehát a webszerveren futnak. A webszervertől képesek adatokat átvenni (standard inputról leolvasni), majd kiírni egy komplett html kimenetet (standard outputra) - ezáltal a webről fogadott űrlap adatokat feldolgozni, és dinamikus módon választ generálni.</box> | ||
+ | |||
+ | == CGI == | ||
+ | |||
+ | A '''CGI''' a ''Common Gateway Interface'' rövidítése: | ||
+ | * NCSA által fejlesztett protokollszabvány (NCSA:National Center for Supercomputing Applications) | ||
+ | * az alkalmazások a web szerveren futnak | ||
+ | * jellemző programozási nyelvei a C, PERL, PhP, stb... | ||
+ | * A webszerver aki képes CGI alkalmazásokat futtatni | ||
+ | ** IIS (Internet Information Services) szerver Windows környezetben | ||
+ | ** APACHE szerver windows és linux környezetben | ||
+ | * Ha a kliens kérése egy futtatható file-ra mutat, akkor a web szerver futtatja ezt a programot, átadja neki a web kérést. A program a bejövő adatokat elsősorban a standard inputról olvassa be (illetve adatbázisból), a kimenetet pedig standard outputra írja, melyet a webszerver fogad, és válaszként visszaadja a kliensnek mint generált weblapot. | ||
+ | |||
+ | A CGI '''előnye''': | ||
+ | A web szerver statikus tartalom visszaadására van alapvetően képezve: előre megírt statikus HTML lap vagy KÉP vagy egyéb file visszaadása a kliens felé. A CGI technológia segítségével aktuális, friss tartalom dinamikusan generálható (pl. árfolyamok aktuális értékei), illetve a kérés aktuális paramétereiben foglaltak alapján generált tartalom (pl. árfolyamok alakulása adott időintervallumban). Példa: [http://www.szerver.hu/arfolyam.php?datum1=1999-01-01&datum2=2001-12-31 árfolyam értékek]. | ||
+ | |||
+ | A CGI '''hátránya''': | ||
+ | A web szerver minden egyes ilyen jellegű kérés esetén processzt (folyamat) indít a szerver gépen. A web szervert üzemeltető operációs rendszer (windows, linux) ezt lassan teszi, így egy időben sok kliens kérés beesése a szerver gépet ez túlterhelheti. | ||
+ | |||
+ | Ennek megoldására dolgozták ki a ''FastCGI'' módszert, mely esetén az alkalmazás a feldolgozás után nem lép ki, hanem újra várakozni kezd a következő feldolgozásra. Így egymás után több kérés esetén a CGI alkalmazást csak egyszer (első esetben) kell indítani, a további esetekben már az alkalmazás indítása felesleges. A FastCGI nem úgy dolgozik, hogy a kéréseket sorban egymás után dolgozza fel, hanem egy időben, párhuzamosan több kérést is. Ehhez szálindításokat végez az alkalmazás. A szál indítása kevésbé terheli az operációs rendszert, mint a processz indítása, így a feldolgozás indítása jóval gyorsabb. Ugyanakkor a többszálú programozás problémás és veszélyekkel teli, így ezen modell fejlesztése és tesztelése időigényesebb feladat. A FastCGI programok nem standard inputon és outputon keresztül kommunikálnak a webszerverrel, mivel ez esetben nem tudnának egy időben több kérést is feldolgozni. Helyette vagy TCP/IP porton, vagy linux esetén domain socketen keresztül. A portot a feldolgozás végén a web szerver és a FastCGI alkalmazás lezárhatja, de a futásuk nem szakad meg, újabb portnyitás révén újabb feldolgozást beszélhetnek meg egymással. | ||
+ | |||
+ | A FastCGI vitathatatlan előnye, hogy a feldolgozó alkalmazás módosítása esetén a webszerver leállítása és újraindítása nem szükséges - csak a FastCGI alkalmazást kell ''leállítani'', lecserélni az újabb verzióra, és engedni a webszervernek, hogy ''újraindítsa''. | ||
+ | |||
+ | A CGI alkalmazások fejlesztéséhez használható nyelvek (C, C++, Java, Perl, PhP) alkalmasak a FastCGI alkalmazások fejlesztésére is. | ||
+ | |||
+ | * [http://en.wikipedia.org/wiki/FastCGI WikiPédia oldal a CGI-ről és FastCGI-ről] | ||
+ | * [http://www.fastcgi.com/devkit/doc/fcgi-spec.html FastCGI specifikáció] | ||
+ | * [http://www.fastcgi.com/ egyéb leírás a FastCGI-ről] |
A lap 2009. június 26., 19:18-kori változata
Dinamikus WEB és CGI
Az Internet jelenlegi alapjait az ARPANET alapjaiból kinőtt, mindent átfogó számítógépes hálózat teremti. Az internet nem csak a WEB-ről szól, mivel a számítógépeket összekötő vezetékes és egyéb kapcsolatokon a számítógépek nem csak weblapokat és képeket cserélnek egymással, és nem csak a HTTP protokoll van használatban. Jelen esetben azonban csak a weblapok fejlesztéséről, azon belül is a web-es űrlapok feldolgozásáról lesz szó.
A weblapok jelenleg a HTML vagy XHTML leíró nyelveken készülnek. Ennek alapjait a CERN-ben vetették meg, mikor is a tudósok valamilyen dokumentum leíró nyelvet kívántak fejleszteni, melyen leírhatták gondolataikat, ötleteiket, és megoszthatták azt egymással. Kezdetben a HTML lapokat karakteres felületen jelenítették meg, de elterjedésével a grafikus felületű megjelenítők, ún. böngészők is megjelentek, melyek a HTML leírást képesek voltak megjeleníteni, és az interakciókat, a linkek aktiválását egérműveletekkel is támogatták.
A HTML lapok kezdetben jellemzően statikusak voltak. Ez azt jelenti, hogy a megjelenített tartalom egy text fájlhoz hasonló, html fájlban egyszerűen le volt gépelve, le volt írva, el volt mentve. A webszervertől a böngésző a fájlt lekérte, a tartalmát elolvasta, értelmezte, és megjelenítette. Amíg a dokumentum tulajdonosa a fájlhoz nem írt hozzá, nem nyúlt bele, minden lekérés ugyanazt a fájlt eredményezte, a böngésző minden egyes alkalommal ugyanazt mutatta a kliens oldalon.
Felmerült az igény, hogy a dokumentum tartalma időben automatikusan kövesse az változásokat. Legegyszerűbb példa: ha a html leírás elején ki volt írva a készítés dátuma, akkor jelenjen meg annak öregsége, legyen kiírva hány nappal (héttel, hónappal) korábban készült az a dokumentum. Ehhez ne kelljen a szerkesztőnek minden nap megnyitni a dokumentumot, és átírni ezt az értéket, hanem ezen módosítás történjen meg automatikusan. Az adatbázisok elterjedésével megjelet az igény a tartalom adatbázisadatok alapján történő generálására is. Ekkor a dokumentumban esetleg szereplő pénzügyi adatok több valuta aktuális értéke alapján is kiszámíthatóak.
A dinamikusan generált weblapokat a webszerveren futtatott programok állították elő. Ezek egyszerű kis programok voltak, amelyek futásuk során a standard kimenetre (Std Out) írták ki a html kimenetet. A webszerver ezen kis programokat a kliens oldali lekéréskor lefuttatta, és a kimenetet összegyűjtve elküldte azt a kliens oldalra. A kliens oldali böngészőt ehhez nem kellett módosítani, ugyanúgy webkérést küld statikus és dinamikus weblap lekérés esetén is, a visszaérkező html válaszon nem érezhető, hogy az statikus vagy dinamikus előállítású-e.
Ezzel meg is született a CGI programozás alapjai. A korábban leírt kis programok, melyek html output előállítására képesek - a CGI programok jellemzőit hordozzák.
Ezzel egyidőben merült fel igényként az is, hogy az adatbázisban tárolt értékeket web-es felületen lehessen megváltoztatni, ne kelljen minden egyes alkalommal adatbáziskezelő programot igénybe venni pl. a valuta-árfolyamok átírásához, lehessen ezt a webes html felület segítségével is megtenni. Ehhez szükséges volt, hogy a html segítségével ne csak információkat lehessen leírni, hanem adatokat is bekérni. A probléma azonban még csak most kezdődik: a bekért adatokat vissza kell tudni juttatni a webszerverre, és ott fel kell tudni dolgozni. A HTTP protokoll egyszerű bővítésével az adatok visszaküldése szerencsére megoldható volt. A feldolgozás a webszerveren szintén megoldható vált - az előzőekben említett egyszerű CGI programok nem csak a dinamikus html lapok generálását tudják elvégezni, hanem a webszerverre érkező adatokat elolvasva azokat ellenőrízni, feldolgozni, menteni adatbázisba. Ezen képességű programokat nevezzük ma CGI programoknak.
CGI
A CGI a Common Gateway Interface rövidítése:
- NCSA által fejlesztett protokollszabvány (NCSA:National Center for Supercomputing Applications)
- az alkalmazások a web szerveren futnak
- jellemző programozási nyelvei a C, PERL, PhP, stb...
- A webszerver aki képes CGI alkalmazásokat futtatni
- IIS (Internet Information Services) szerver Windows környezetben
- APACHE szerver windows és linux környezetben
- Ha a kliens kérése egy futtatható file-ra mutat, akkor a web szerver futtatja ezt a programot, átadja neki a web kérést. A program a bejövő adatokat elsősorban a standard inputról olvassa be (illetve adatbázisból), a kimenetet pedig standard outputra írja, melyet a webszerver fogad, és válaszként visszaadja a kliensnek mint generált weblapot.
A CGI előnye: A web szerver statikus tartalom visszaadására van alapvetően képezve: előre megírt statikus HTML lap vagy KÉP vagy egyéb file visszaadása a kliens felé. A CGI technológia segítségével aktuális, friss tartalom dinamikusan generálható (pl. árfolyamok aktuális értékei), illetve a kérés aktuális paramétereiben foglaltak alapján generált tartalom (pl. árfolyamok alakulása adott időintervallumban). Példa: árfolyam értékek.
A CGI hátránya: A web szerver minden egyes ilyen jellegű kérés esetén processzt (folyamat) indít a szerver gépen. A web szervert üzemeltető operációs rendszer (windows, linux) ezt lassan teszi, így egy időben sok kliens kérés beesése a szerver gépet ez túlterhelheti.
Ennek megoldására dolgozták ki a FastCGI módszert, mely esetén az alkalmazás a feldolgozás után nem lép ki, hanem újra várakozni kezd a következő feldolgozásra. Így egymás után több kérés esetén a CGI alkalmazást csak egyszer (első esetben) kell indítani, a további esetekben már az alkalmazás indítása felesleges. A FastCGI nem úgy dolgozik, hogy a kéréseket sorban egymás után dolgozza fel, hanem egy időben, párhuzamosan több kérést is. Ehhez szálindításokat végez az alkalmazás. A szál indítása kevésbé terheli az operációs rendszert, mint a processz indítása, így a feldolgozás indítása jóval gyorsabb. Ugyanakkor a többszálú programozás problémás és veszélyekkel teli, így ezen modell fejlesztése és tesztelése időigényesebb feladat. A FastCGI programok nem standard inputon és outputon keresztül kommunikálnak a webszerverrel, mivel ez esetben nem tudnának egy időben több kérést is feldolgozni. Helyette vagy TCP/IP porton, vagy linux esetén domain socketen keresztül. A portot a feldolgozás végén a web szerver és a FastCGI alkalmazás lezárhatja, de a futásuk nem szakad meg, újabb portnyitás révén újabb feldolgozást beszélhetnek meg egymással.
A FastCGI vitathatatlan előnye, hogy a feldolgozó alkalmazás módosítása esetén a webszerver leállítása és újraindítása nem szükséges - csak a FastCGI alkalmazást kell leállítani, lecserélni az újabb verzióra, és engedni a webszervernek, hogy újraindítsa.
A CGI alkalmazások fejlesztéséhez használható nyelvek (C, C++, Java, Perl, PhP) alkalmasak a FastCGI alkalmazások fejlesztésére is.