CGI-дің CGI-программасы, веб-сервер және Web клиенті арасында мәліметтерді жіберетін төрт тәсілі бар:
§ Айнымалылар қоршауы.
§ Командалық қатар.
§ Стандартты енгізу құрылғысы.
§ Стандартты шығару құрылғысы.
Осы төрт әдістің көмегімен сервер клиент жіберген барлық мәліметтерді CGI-программаға қайта жібереді. Одан кейін CGI-программа өзінің таңғажайып ісін орындап, барлық шығу ақпараттарын қайтадан серверге жібереді.
Айнымалылар қоршауы
Сервер CGI-программаны орындаған кезде, ең алдымен оған жұмысқа арналған бірқатар мәліметтерді айнымалылар қоршауы түрінде жібереді. Спецификацияда ресми түрде он жеті айнымалы анықталған, бірақ HTTP_mechanism деп аталатын механизм көмегімен бұдан көбірек қолданылады. CGI-программа бұл айнымалылардың кез келгенін командалық қатардан іске қосу кезіндегі командалық үрдісор ортасының кез келген айнымалысы сияқты қолдана алады. Мысалы, командалық үрдісор сценарийінде FOO айнымалылар қоршауымен $FOO түрінде қатынасуға болады. 5.1-кестеде мәні null болса да, әрқашанда сервер орнататын айнымалылардың тізімі берілген. Бұл айнымалылардан өзге, клиентке оралған сұраныстың тақырыбында HTTP_FOO түріндегі айнымалылар бар, мұндағы FOO – тақырып аты. Мысалы, көптеген веб-броузерлерде USER_AGENT түріндегі мәліметтер бар. Біздің CGI-программа бұл мәліметтерді HTTP_USER_AGENT айнымалысынан ала алады.
5.1- кесте. CGI айнымалылар қоршауы
Айнымалылар қоршауы | Сипаттамасы |
CONTENT LENGTH | POST немесе PUT әдісімен берілген мәліметтер ұзындығы, байтпен |
CONTENT_TYPE | POST немесе PUT әдісінің көмегімен байланыстырылған MIME мәліметтерінің типі. |
GATEWAY_INTERFACE | Сервер қолдайтын CGI спецификациясының нұсқасының нөмірі |
PATH_INFO | Клиент жіберген жол жөнінде қосымша ақпарат. Мысалы, http://www.myserver.com/test.cgi/this/is/a/ path?field=green сұранысы үшін РАTH_INFO айнымалысының мәні /this/is/a/path болады |
PATH_TRANSLATED | PATH_INFO сияқты, бірақ сервер барлық мүмкін болатын трансляцияны орындайды, мысалы «~account» типі атауын орналастыру. |
QUERY_STRING | URL-де «?» символынан кейінгі барлық мәліметтер. Бұл сонымен бірге GEТ формасы бар REQUEST_METOD берілетін мәліметтер. |
REMOTE_ADDR | Сұраныс жасап отырған клиенттің IP-адресі. |
REMOTE_HOST | Қатынас құруға болатын клиент машинасы түйінінің аты. |
REMOTE_IDENT | Егер веб-сервер мен клиент identd түріндегі идентификацияны қолдаса, сұраныс жасайтын тіркеу жазбасының пайдаланушы аты. |
REQUEST_METHOD | Клиент қолданатын сұранысқа арналған әдіс. CGI-программалары үшін, бұл әдетте POST немесе GET болады. |
SCRIPT_NAME | Клиент көрсеткен орындалатын сценарий жолы. URL сілтемесі кезінде өзіне өзісілтеме ретінде қолданылады және әр түрлі орындардағы сілтемелер орналасқан орнына қатыссыз орындалу үшін қолданылады. |
SERVER_NAME | Машинаның аты қатынас құруға мүмкін болмаған жағдайда Веб-сервер орындалатын түйін аты немесе IP-адрес. |
SERVER_PORT | Веб-сервер қолданатын порттың нөмірі.. |
SERVER_PROTOCOL | Сервермен байланысу үшін клиент қолданатын хаттама. Біздің жағдайымызда бұл әркезде дерлік HTTP болады. |
SERVER_SOFTWARE | CGI-программаны орындайтын веб-сервердің нұсқасы жөнінде мәлімет. |
Сервер жіберілген, сервер орнатқан барлық айнымалылар қоршауын, сонымен бірге командалық үрдісор орнатқан барлық мұраланған айнымалыларды шығаратын, Perl-де жазылған CGI сценарийіне мысал келтірейік.
5.1- листинг. Айнымалалар қоршауы мәндерін шығару.
print "Content-Type: text/html\n\n
<HTML><HEAD><TITLE></title></head><BODY>\n
<p>Айнымалылар қоршауы:<p>\n";
foreach (keys %ENV) {print "$_: $ENV{$_}<br>\n" }
print "</body></html>";
Бұл айнымалылардың барлығы біздің CGI-программада қолданылып, тіпті өзгертілуі де мүмкін. Бірақ, бұл өзгертулер программаны іске қосатын веб-серверге әсер етпейді.
CGI кіріс мәліметтерді стандартты stdin енгізу ағынынан немесе айнымалылар арасынан алады да, өз жұмысының нәтижесін стандартты шығару ағыны stdout жібереді.
§ Стандартты енгізу ағыны – программа (скрипт) үнсіз келісім бойынша кіріс ақпараттарды алатын орын. Әдетте бұл пернетақта болады, бірақ оны өзгерте отырып, программа кіріс ақпараттарды файлдан, сокеттен немесе басқа программаның шығыс ағынынан алатындай етуге болады.
§ Айнымалылар қоршауы (Переменные окружения) (environment variables) – жүйе және сервер үшін анықталған, CGI орындалатын айнымалылар.
§ Стандартты шығару ағыны (stdout) - программа (скрипт) өз жұмысының нәтижелерін шығаратын орын. Әдетте бұл экран болады, бірақ оны файлға, сокетке, басқа программаның кіріс ағынына, принтерге т.б. өзгертуге болады.
CGI-ді параметрлерсіз шақыру
Ағымдағы мерзімді шығаратын қарапайым скрипт:
#!/bin/sh echo Content-type: text/html echo echo "<h2>Today is " date echo "</h2>"HTML құжатында бұған сілтеме келесі түрде жазылады:
<a href="/cgi-bin/examples/today.cgi">Ескерту: шығарылатын нәтиже – шығарылатын құжаттың тақырып қатарының типін көрсетуді ұмытпау керек. Бұл мысалдағы екінші және үшінші қатар.
echo Content-type: text/html echoмұндағы Content-type: - шығарылатын құжаттың типі (text/html, image/gif, image/jpeg және т.б.).
Бос қатар тақырып қатарының аяқталып, ары қарай құжаттың өзі орналасатындығын білдіреді.