Hogyan működik a Web

A Web működéséhez két fontos dolog kell: Hálózat sem árt, hogy a kettőt összekösse, de ez elhagyható. Aki CGI írásra adja a fejét általában ugyanazon a gépen fogja használni a böngészőjét, mint ahol a szerver fut, ilyenkor a hálózat a egy gépen belül van, virtuálisan.

Általános architektúra
A böngésző Web oldalakat jelenít meg, amelyeket a Web szervertől kap. Ezeknek a formátuma többnyire HTML, és lehetnek benne képek. A Web szerver a kért oldalt általában a szerveren lévő diszkről veszi.

Az oldal letöltésének és megjelenítésének folyamata a következő:

A csatorna Perl programozási szempontból olyan mint egy nem pufferelt fájl, nem open-nel kell megnyitni, hanem némi socket hókusz-pókusszal, de utána teljesen olyan, mint egy olyan fájl, amelybe print utasítással lehet írni, és <> operátorral lehet belőle olvasni. Ezzel azonban a CGI programozáshoz nem kell törődni, ez csak akkor érdekes, ha valaki Perl-ben akar HTTP klienst (böngészőt) írni.

A HTTP kérés és HTTP válasz egyszerű szövegfájl. A formátuma a TCP/IP-ben szokásos:

(Azonnal jön egy példa.) Ez egy nagyon egyszerű protokoll, éppen az egyszerűsége az oka annak, hogy olyan jól elterjedt. Amikor a böngésző megjelenített egy oldalt a kapcsolat lebomlik, a szerver foglalkozhat más kliensekkel, nincs semmilyen erőforrás az éppen inaktív, olvasó klienshez kötve. Amikor újabb oldalt kér le a felhasználó a folyamat megismétlődik.

A CGI és általánosabban a Web programozás ott jön be a képbe, amikor az URL által meghatározott oldal nincs statikusan a szerveren, hanem valahogy elő kell állítani a szerveren lévő információkból. A sima HTML oldalak és képek lekérését úgy is lehet tekinteni, mint a nulla operátort, amikor a Web szerver nem csinál semmit, csak leküldi a kliensnek a Web oldalt. Amikor azonban az információ nem ilyen módon áll rendelkezésre, vagy ha a kérés feldolgozása során a szerveren tárolt információk megváltoznak, akkor már Web szerver programozásról van szó.

Ilyenkor a szerver nem csak beolvas egy fájlt valamelyik diszkjéről, hanem elindít valamilyen programot, és ennek a programnak az eredménye adja a szerver válaszát. Egy nagyon egyszerű példaprogram kiírhatja az 1970. január 1. nulla óra nulla perc, nulla másodperc időpont óta eltelt időt másodpercekben:

#!/usr/bin/perl
require 'state.pl';
print_http_state('200 OK');
$time = time();
print <<END;
Content-type: text/html

<HTML>
<BODY>
$time
</BODY>
</HTML>
END

A timenow.pl kimenete éppen most :-)
Természetesen ez nem egy komoly CGI program, csak egy nagyon egyszerű példa, de jól látható belőle, hogy a Web szerver egy olyan választ ad, amelyet a program állít elő. A program a szabványos kimenetére küldi az egész HTTP választ (nem mindig így kell!!), amely jelen esetben két fejléc sorból, és egy rövid törzsből áll.

Ezzel a legelső cgi programot meg is írtuk. Persze nem csak cgi felület létezik. Nagyon sok lehetőség van arra,hogy a Webszerver program miként indítsa el az alkalmazást, annak hogyan adja át a paramétereket, és hogyan kapja meg az eredményt.

A cgi programozásnál a Webszerver egy külön processzt indít el, és ennek a processznek a parancsorában, a szabványos bemenetében és a környezeti változókban adja át a http kérés paramétereit, a program által megjelenítendő HTML oldalt pedig a processz szabványos kimenetéről veszi.

Egy másik lehetőség az isapi felület, amelyik nem indít el egy külön processzt, hanem az alkalmazásokat, mint dinamikusan szerkeszthető könyvtárakat kell a Webszerverhez illeszteni. Ez sokkal gyorsabb lehet, mint a cgi, mert nem indít új processzt, viszont egy végtelen ciklus, vagy bármely más programhiba az egész webszerver processzt veszélyezteti. És nem minden webszerver tudja, csak a Microsoft IIS, és az Apache. (Azóta, hogy ezt írtam lehet, hogy mások is tudják.)

Egy hoszabb cikk az architektúráról, amely az Új Alaplapban jelent meg.

Ezután a bevezető után tehát nézzük meg, hogy mi is a cgi, precízen, hogyan működik.


Verhás Péter Home Page . . . . . . CGI röviden, tartalomjegyzék