Specifikacii CGI


|lementy CGI
Peremennye okruzheniya Opcii komandnoj stroki Standartnyj vvod Standartnyj vyvod

CGI skript -- programma, napisannaya v sootvetstvii so specifikaciej Common Gateway Interface. CGI skripty mogut byt' napisany na lyubom yazyke programmirovaniya(C, C++, PASCAL, FORTRAN i t.p.) ili komandnom yazyke (shell, cshell, komandnyj yazyk MS-DOS, Perl i t.p.). Skript mozhet byt' napisan dazhe na yazyke redaktora EMAC v sistemah Unix.

SHlyuz -- eto CGI skript, kotoryj ispol'zuetsya dlya obmena dannymi s drugimi informacionnymi resursami Internet ili prilozheniyami-demonami. Obychnaya CGI programma zapuskaetsya serverom HTTP dlya vypolneniya nekotoroj raboty, vozvrashchaet rezul'taty serveru i zavershaet svoe vypolnenie. SHlyuz vypolnyaetsya tochno takzhe, tol'ko, fakticheski, on iniciiruet vzaimodejstvie v kachestve klienta s tret'ej programmoj. Esli eta tret'ya programma yavlyaetsya servisom Internet, naprimer, server Gopher, to shlyuz stanovitsya klientom Gopher, kotoryj posylaet zapros po portu Gopher, a posle polucheniya otveta peresylaet ego serveru HTTP. Analogichno proishodit vzaimodejstvie s serverami raspredelennyh baz dannyh, naprimer Oracle. Na risunke predstavlena shema vzaimodejstviya servera HTTP s serverom Gopher cherez shlyuzovuyu programmu.

Sobstvenno specifikaciya CGI opisyvaet chetyre nabora mehanizmov obmena dannymi:

Peremennye okruzheniya. Pri zapuske vneshnej programmy server sozdaet specificheskie peremennye okruzheniya, cherez kotorye peredaet prilozheniyu kak sluzhebnuyu informaciyu, tak i dannye. Vse peremennye mozhno razdelit' na obshchie peremennye okruzheniya, kotorye generiruyutsya pri lyuboj forme zaprosa, i zapros-orientirovannye.

Opcii komandnoj stroki. Komandnaya stroka ispol'zuetsya tol'ko pri zaprosah tipa ISINDEX. Pri HTML FORMS ili lyubyh drugih zaprosah neopredelennogo tipa komandnaya stroka ne ispol'zuetsya. Esli server opredelil, chto k skriptu obrashchayutsya cherez ISINDEX dokument, to poiskovyj kriterij vydelyaetsya iz URL i preobrazuetsya v parametry komandnoj stroki. Pri etom znakom razdeleniya parametrom yavlyaetsya simvol "+". Tip zaprosa opredelyaetsya po nalichiyu ili otsutstviyu simvola "=" v zaprose. Esli etot simvol est', to zapros ne yavlyaetsya zaprosom ISINDEX, esli simvola net, to zapros prinadlezhit k tipu ISINDEX. Parametry, vydelennye iz zaprosa, pomeshchayutsya v argv[1...]. Pri etom posle iz vydeleniya proishodit preobrazovanie vseh shestnadcaterichnyh simvolov v ih ASCII kody. Esli chislo parametrov prevyshaet ogranicheniya, ustanovlennye v komandnom yazyke, naprimer v shell, to formirovaniya komandnoj stroki ne proishodit i dannye peredayutsya tol'ko cherez QUERY_STRING. Voobshche govorya, sleduet zaranee podumat' ob ob®eme dannyh, peredavaemom skriptu, i vybrat' sootvetstvuyushchij metod dostupa. Razmer peremennyh okruzheniya tozhe ne bezgranichen, i esli neobhodimo peredavat' mnogo dannyh, to luchshe srazu vybrat' metod POST, t.e. peredachu dannyh cherez standartnyj vvod.

Format standartnogo vvoda. Standartnyj vvod ispol'zuetsya pri peredachi dannyh v skript po metodu POST. Ob®em peredavaemyh dannyh zadaetsya peremennoj okruzheniya CONTENT_LENGTH, a tip dannyh v peremennoj CONTENT_TYPE. Esli iz HTML formy nado peredat' zapros tipa: a=b&b=c, to CONTENT_LENGTH=7, CONTENT_TYPE=application/x-www-form-urlencoded, a pervym simvolom v standartnom vvode budet simvol "a". Sleduet vsegda pomnit', chto konec fajla serverom v skript ne peredaetsya, a poetomu zavershat' chtenie sleduet po chislu prochitannyh simvolov. Pozzhe my razberem primery skriptov i obsudim osobennosti ih realizacii v raznyh operacionnyh sistemah.

Format standartnogo vyvoda. Standartnyj vyvod ispol'zuetsya skriptom dlya vozvrata dannyh serveru. Pri etom vyvod sostoit iz zagolovka i sobstvenno dannyh. Rezul'tat raboty skripta mozhet peredavat'sya klientu bez kakih-libo preobrazovanij so storony servera, esli skript obespechivaet postroenie polnogo HTTP zagolovka, v protivnom sluchae server zagolovok modificiruet v sootvetstvii so specifikaciej HTTP. Zagolovok soobshcheniya dolzhen otdelyat'sya ot tela soobshcheniya pustoj strokoj. Obychno v skriptah ukazyvayut tol'ko tri polya HTTP zagolovka: Content-type, Location, Status.

Content-type ukazyvaetsya v tom sluchae, kogda skript sam generiruet dokument "na letu" i vozvrashchaet ego klientu. V etom sluchae real'nogo dokumenta v fajlovoj sisteme servera ne ostaetsya. Pri ispol'zovanii takogo sorta skriptov sleduet uchityvat', chto ne vse servery i klienty otrabatyvayut tak, kak predstavlyaetsya razrabotchiku skripta. Tak pri ukazanii Content-type: text/html, nekotorye klienty ne realizuyut skanirovaniya poluchennogo teksta na predmet nalichiya v nem vstroennoj grafiki. Obychno v Content-type ukazyvayut tekstovye tipy text/plain i text/html.

Location ispol'zuetsya dlya pereadresacii. Inogda pereadresaciya pomogaet preodolet' ogranicheniya servera ili klienta na obrabotku vstroennoj grafiki ili servernoj predobrabotki. V etom sluchae skript sozdaet fajl na diske i ukazyvaet ego adres v Location. Server takim obrazom peredaet real'no sushchestvuyushchij fajl. V poslednee vremya servery stali buferizovat' vozvrashchaemye klientam dannye, chto privodit k resheniyu voprosov svyazannyh s povtornym zapuskom skriptov dlya vstraivaniya grafiki i razgruzki komp'yutera s serverom HTTP.