Výstup CGI skriptu - 2. časť CGI

Možno sa vám bude zdať, že postupujeme od konca k začiatku, keď sme si ešte nespomenuli nič o vstupe do CGI skriptu a už sa vrháme na výstup. Mám však dva dôvody, prečo takto postupujem. Prvý z nich je ten, že CGI skript nemusí vždy dostať na svoj vstup dáta. Druhý je tiež vcelku prozaický - darmo budem vedieť ako skriptu dáta odovzdať, keď neviem ako ich spracované vrátiť užívateľovi.

Ako som už spomenul v predchádzajúcich dieloch, výstup skriptu pozostáva z dvoch častí: http hlavičky a samotných dát. Tvorba dát je zrejme každému jasná, pozrime sa teda na http hlavičky.

HTTP hlavičky

CGI skript (lepšie povedané jeho autor) sa môže rozhodnúť, či v CGI skripte vráti kompletnú http hlavičku, alebo len jej časť. Väčšinou samozrejme programátori volia druhú možnosť - na výstup svojho CGI skriptu posielajú len tie najnutnejšie riadky hlavičky a jej dotvorenie prenechávajú web servru. Uveďme si teraz taký príklad:

print "Content-type: text/htmlnn";
print <<Koniec_Html;
<HTML>
<HEAD>
<TITLE>Jednoduchý virtuálny HTML dokument</TITLE>
</HEAD>
<BODY>
<H1>Virtuálny HTML dokument</H1>
<HR>
<P>
Tento dokument je výstupom CGI skriptu $ENV{SCRIPT_NAME}.
</BODY>
</HTML>
Koniec_Html

exit(0);
Výsledok

Myslím že tento skript netreba veľmi vysvetlovať čo sa Perlu týka, spomenul by som však jednu črtu ktorá sa tu objavuje: vkladanie premenných. Pokým do textu, ktorý má byť výstupom skriptu vložíte názov premennej a táto premenná je definovaná, Perl automaticky doplní na dané miesto jej hodnotu. V našom prípade teda bude $ENV{SCRIPT_NAME} zamenené na skutočné meno súboru so skriptom.

Riadok print "Content-type: text/htmlnn"; v našom skripte je práve tou časťou kódu, ktorá generuje časť http hlavičky. Konkrétne tu je povedané, že MIME typ výstupných dát bude text/html. Samozrejme že MIME typ výstupných dát nie je jedinou vecou, ktorú môžete v http hlavičke určiť. V nasledujúcej tabuľke sú vymenované typy hlavičiek, ktoré môže CGI skript vrátiť.

Content-length Content-type Expires Location Pragma Status Refresh Set-Cookie Kompletný zoznam http hlavičiek

Pri tvorbe http hlavičiek vo vašich skriptoch si vždy zapamätajte 2 zásady:
  • Blok hlavičiek musí byť oddelený od dát prázdnym riadkom
  • Riadky hlavičky nemusia dodržiavať žiadne zvláštne poradie

Samozrejme ako som už spomenul, nemusíte nechávať dotvorenie hlavičky na server ale môžete ju v CGI skripte vytvoriť kompletnú. Takto môžete pri navracaní dokumentu klientovi obísť jeden z článkov reťazca ktorým váš skript prechádza. Treba však pamätať na skutočnosť, že prípadnú chybu v hlavičke už nemá možnosť server opraviť.

Ako server zistí, že výstup skriptu obsahuje kompletnú http hlavičku? Servery typu NCSA a CERN (spadá sem aj najpoužívanejší web server - Apache) to spoznajú podľa názvu CGI skriptu, ktorého meno musí začínať reťazcom "nph-", čo znamená Non-parsed header ("nerozobraná" hlavička). Výstup takéhoto skriptu ide priamo ku klientovi bez zapojenia servera.

Možno sa pýtate, aký to môže mať význam. Predstavte si situáciu, keď chcete na strane klienta niečo postupne vypisovať po určitej dobe (napr. spraviť čosi ako odpočítavanie od 50 po jednej sekunde tak, aby každú sekundu skript vypísal hodnotu, ktorá ostáva k nule). Kebyže na toto použijete nekompletnú hlavičku, celý skript by prebehol na servri a výsledok by sa zobrazil až po vykonaní skriptu. Ak však použijete kompletnú hlavičku, budete vidieť ako skript vypisuje jednotlivé hodnoty.

Myslím že pre dnešok by stačilo. Nabudúce si povieme niečo viac o http hlavičkách, presmerovaniach servra a návratových kódoch http požiadaviek.

Developer,
Stiahnuté z Developer.sk