Webtechnológia, előadásvázlat, 2007/08-II. félév
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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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 (""); printf ("
Az ön IP címe: %s
", envstr); printf (""); 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 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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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 SCRIPT_NAME QUERY_STRING REQUEST_URI REMOTE_HOST REMOTE_ADDR AUTH_TYPE REMOTE_USER CONTENT_TYPE CONTENT_LENGTH HTTP_USER_AGENT
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: 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
Webtechnológia, előadásvázlat, 2007/08-II. félév
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