A webhelyhez kötődő szoftverek architektúrája A webhelyhez kötődő szoftverek architektúrája...1 A kliens-szerver funkcionalitások megoszlása...1 A böngésző mint web kliens...1 Web szerver (kiszolgáló) felépítése...2 1. Beépített feldolgozó modulok...3 2. A CGI (Common Gateway Interface) interfész...4 3.Sablonok és preprocesszor nyelvek alkalmazása...5 A CGI változók...6 A kliens-szerver funkcionalitások megoszlása Funkcionalítások: -a tartalom megjelenítése grafikus vagy egyéb (szöveges) formában -a tartalom feldolgozása ezt általában a szerver oldali alkalmazás logikája végzi el -tartalom tárolás általában szerver oldalon, adatbázisokban Amennyiben a kliens oldalon nagyobb mértékű feldolgozásra kerül sor (pl. bonyolultabb Java appletek) akkor vastag kliensekről (thick client) beszélünk. Csak megjelenítés esetén pedig vékony kliensről: thin client. A böngésző mint web kliens Az alábbi ábra a jelenlegi böngészők felépítését tartalmazza. Alternatív böngésző formák -szöveges -grafikus -WAP -egyéb új mobil eszközök 1
A modern böngésző felépítése Web szerver (kiszolgáló) felépítése Szerver oldali szolgáltatást futtató alkalmazás, amely HTTP protokollon keresztül biztosít tartalom hozzáférést. Osztályozás: -web sz. statikus tartalommal -web sz. dinamikus tartalommal -web sz. osztott alkalmazásból származó tartalommal 2
A web szerverek funkcionalitása egyre inkább bővül, ezért struktúrájuk is egyre magasabb absztrakciós szintekben való megvalósítást igényel. Konkrétan az Apache nevű webszervert fogjuk használni, moduljait és konfigurálását a laboron vesszük át. Dinamikus tartalmat kiszolgáló webszerver felépítése A dinamikus tartalommegjelenítés típusai 1. Beépített feldolgozó modulok példa: SSI (Server Side Includes) funkcionalitások: -szerver oldali programok kimenete illeszthető a lapba -rendszerváltozók, állomány létrehozása időpontja írható ki 3
megoldás: a webszerver egy szűrőt használ bizonyos egyébként statikus - állományok kiküldésekor, és egy adott szintaxis szerinti (include) szöveget illeszt a lapba. A szövegeket kis szerver oldali műveletek illetve alkalmazások futtatása árán éri el. 2. A CGI (Common Gateway Interface) interfész Lehetőséget nyújt egy szerver oldali alkalmazás futtatására a böngésző kérésének hatására. Az alkalmazást bármilyen programnyelven meg lehet írni. Független Ingyenes - ezért vált a legelterjedtebbé Külön folyamat minden CGI program Programozási nyelv és szerver architektúra független Hátrányok: a klasszikus CGI lassú (de azért nem vészesen lassú) minden kérés új folyamatot vagy indít. Ma már léteznek ennél gyorsabb megoldások, ugyanannál a kivitelező programtípusnál maradva: FastCGI. -a /cgi-bin könyvtár konfigurálása -biztonsági kérdések A CGI környezet paraméterei (listájukat lásd a dokumentum végén): A CGI változók név/érték párok, amelyek információkat adnak a kliens szoftverről illetve gépről, a szerver szoftverről valamint a HTTP kérés pontos fejléc és paraméter adatairól. Az ábra szemlélteti ezeket az információkat. A fejezet végén található mellékletben néhány változó részletes leírása található. A PHP-be a $_SERVER tömbön keresztül érjük el őket, lásd a Változók / Előredefiniált változók fejezetet. 4
Az alábbi kis program egy CGI-ként elindítható program, amely visszaírja a kliens gép IP címét a böngészőnek: #include <stdio.h> #include <stdlib.h> int main() { char * envstr; /* ez a fejlec sor mindig kotelezo */ printf("%s%c%c\n","content-type:text/html;charset=utf-8",13,10); /* a CGI parametereket kornyezeti valtozokkent kapjuk */ envstr = getenv("remote_addr"); /* a program kimenete a webre kerul */ printf ("<html><head></head><body>"); printf ("<p>az ön IP címe: %s</p>", envstr); printf ("</body></html>"); } exit(0); A programot a szerver cgi-bin könyvtárában kell lefordítani, és amennyiben a végrehajtható állományt végrehajthatóvá tesszük, és pl. test.cgi névre fordítjuk, akkor a helyi gépen: http://localhost/cgi-bin/test.cgi címmel futtathatjuk. 3.Sablonok és preprocesszor nyelvek alkalmazása A dinamikus tartalommegjelenítés alapja: sablon + dinamikus tartalom. A sablont egy preprocesszor elemzi, és megadott helyeken valamilyen szkript nyelvet futtat, annak kimenetét pedig a sablonba írja. A szerver az így kapott szöveget küldi válaszként a kliensnek. A preprocesszor akár CGI interfészen, akár beépített modulként kapcsolódhat a webszerverhez. A végrehajtás lépései:.php tipus => hozzárendelés a PHP parser-hez a parser a programrészek esetében végrehajtja azokat, kimenetüket beilleszti a válaszba A dokumentum szintaxisának biztosítania kell a szkript részek elkülönítését, pl: <??> vagy <?php?> kezd-vég tag-ek (címkék) alkalmazásával ezután a generált tartalmat elküldi a böngészőnek. Az úgy fogadja mintha statikus tartalmat kapott volna. 5
Példák preprocesszorokra: PHP JSP (Java Server Pages, Sun) Coldfusion (Macromedia) ASP (Active Server Pages, Microsoft) Embedperl A CGI változók Valamennyi szerver oldali megoldás esetében fontos szerepet játszanak a CGI változók, melyeket a szerver mint környezeti változókat vagy pedig mint előre, a szkript futása előtt létrehozott változókat ad át a szkriptnek. A fontosabbak az alábbiak: Változó neve SERVER_SOFTWARE SERVER_NAME GATEWAY_INTERFACE SERVER_PROTOCOL SERVER_PORT REQUEST_METHOD PATH_INFO PATH_TRANSLATED Mit tartalmaz A kiszolgálón futó szerver szoftver nevét és verzióját tartalmazza: Apache/2.0 A kiszolgáló gép nevét tartalmazza. Tartománynév vagy IP cím: www.ms.sapientia.ro Melyik CGI verziót használja a webszerver: CGI/1.1 Milyen protokoll verziót használ: HTTP/1.1 Melyik TCP portot használja a szerver: 80 Milyen metódust küldött a kliens a http kérésben: GET vagy POST vagy HEAD Amennyiben a kliens a HTTP virtuális útvonalon kívül küldött egyébb információt a dokumentum elérésére Az az útvonal, amit a szerver kapott meg a virtuális útvonal átfordításakor. Ez általában egy könyvtár a szerver oldalon: SCRIPT_NAME QUERY_STRING REQUEST_URI REMOTE_HOST REMOTE_ADDR AUTH_TYPE REMOTE_USER CONTENT_TYPE CONTENT_LENGTH HTTP_USER_AGENT A meghívott szkript neve. Ez felhasználható, ha egy szkript saját magára akar hivatkozni. Az az információ ami a? karaktert követi az URL-ben A kérés relatív webcíme A távoli, kliens gép neve A távoli, kliens gép IP címe A HTTP hitelesítés típusa: Basic vagy Digest A bejelentkezett felhasználó neve Milyen MIME típusú adat van a törzs részben amennyiben a kérés POST Milyen hosszú ez a tartalom A HTTP fejlécekből nyert változók A kliens neve: 6
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1 HTTP_ACCEPT Milyen MIME tartalmat fogad a kliens: text/html, text/xml HTTP_ACCEPT_LANGUAGE Milyen nyelvet preferál a kliens: hu,en-us;q=0.7,en;q=0.3 HTTP_ACCEPT_ENCODING Milyen kódolást fogad el a kliens: gzip HTTP_ACCEPT_CHARSET Milyen karakter kódolást fogad el a kliens: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_CONNECTION Kér-e TCP kapcsolat fenntartást a kliens: keep-alive 7