GET әдісі үшін кіріс деректерін өңдеу.

GET әдісі үшін кіріс деректерді өңдеудің алгоритмі келесі қадамдар бойынша жүзеге асады:

1. QUERY_STRING айнымалысының мәнін анықтау

2. Есімдер мен олардың мәндерін декодтау. Және де бос орын белгілері “+” белгісіне, ондық кодтар 128-н асатын белгілер “%” белгісіне алмастырылады. Ал олардан кейінгілер он алтылық кодпен алмастырылады.

3. “Есім-мән” құрылымын қалыптастыру.

GET әдісінде программаға деректерді жіберу айнымалы ортаға байланысты орындалады. QUERY_STRING айнымалысына келесі форматтағы жолдардың мәні келіп түседі:

“Есім1=Мәні1&Есім2=Мәні2&Есім3=Мәні3...&ЕсімN=МәніN”

Мұндағы есімN – NAME атрибутының мәні, ол форманың басқару элементінің есімін береді. МәніN орнына сервер Value атрибутының мәнін жазады.Оны пайдаланушы есімN элементінде енгізген. QUERY_STRING жолын программалау тілінің қарапайым функциялары арқылы өңдейді. Бірақ оны қайта өңдеуге тиым салынады. Бұл жол URL-кодтауды қолданады.

Кіріс деректерді декодтаудан кейін, жол массивінде барлық есім=мән жұбы сақталады. Бұл массивті пайдаланушы есептің қойылу шартына байланысты әр түрлі пайдаланады.

POST әдісі үшін кіріс деректерді өңдеу

Кіріс деректерді POST әдісі бойынша өңдеудің алгоритмі келесі қадамдардан тұрады:

1. CONTENT_LENGTH айнымалысының мәнін анықтау.

2. Есімдер мен олардың мәндерін декодтау. Және де бос орын белгілері “+” белгісіне, ондық коды 128-н асатын белгілер “%” белгісіне алмастырылады. Ал олардан кейінгілер он алтылық кодпен алмастырылатыны ескеріледі.

3. “Есім-мән” құрылымын қалыптастыру.

STDIN ағымынан деректерді оқу керек. Егер CONTENT_TYPE қоршаған орта айнымалысының құрамында application/x-www-form-urlcoded мәні болса, онда STDIN ағымындағы деректерді де декодтау керек.

POST әдісі бойынша кіріс деректер stdin стандартты ағымы арқылы жүзеге асады. STDIN ағымы бойынша кірген деректердің байт бойынша көлемі CONTENT_LENGTH айнымалысында көрсетіледі.

Сыртқы программа мен сервердің өзара қатынас интерфейсін қарастырамыз.

Пайдаланушыларға деректер енгізу

Пайдаланушыдан берген кіріс деректердің енгізу әдісіне қарамай, CGI программа өзінің шешімін STDOUT стандартты ағымына жібереді. Бұл шешім HTML-құжат түрінде немесе сервердің ережелері түрінде болады, мұнда қажетті ақпаратты алуға болады. Соңғы әдістің басымдығы мынада: cgi-модуль әрбір шақырылым үшін толық HTTP тақырыбын жасауға міндетті емес.

Сценариді шығару тақырыбы.

Әдетте, сценариді шығару сервермен жүзеге асады және пайдаланушыға жіберіледі. Торап арқылы жіберілген файлдың түрі жайлы ақпаратты броузер тіркейді және ол файлдан бұрын жетеді. Сервер тақырыпты құра алмағандықтан, сценаридің өзі сәйкес тақырыпты жіберуді қамтамасыз етуі тиіс. Осыған орай, деректерді өңдеуден бөлек, сценарий шығу ағымына түзу қатесіз жазылған мәтінді жіберу керек. Ол мәтін жолдардан және жауап өрістерден: жалпы тақырыбы (General-Header) және хабарлама денесінің тақырыбынан (Entity-Header) , сонымен қатар жауаптар тақырыбынан (Response-Header) тұрады.

Шығарылу кіші тақырыптан басталады. Ол HTTP тақырыбы форматындағыдай мәтіндік жолдардан тұрады және бос жолмен (жолды ауыстыру символынан тұрады) аяқталады. Мәтіннің кез-келген жолы, егер ол сервердің директивасы болмаса, тікелей қолданушыға жіберіледі. Қазіргі уақытта CGI торабы сервердің үш директивасын қарастырады:

Есімі Анықтама беру
Content-type Қайтарылған құжаттың MIME-түрі
Location Серверге құжаттың өзі емес, құжатқа сілтеме жіберіледі. Осы кезде сервер пайдаланушыға шақырылуды қайта жіберуді сұрайды.
Status Серверге HTTP жол-статус береді, ол пайдаланушыға жіберіледі. Формат: nnn xxxxx, мұнда nnn-үш санды статус-код және ххххх-себеп жолы

Қызықты ақпарат жағдай жолында болады. Жағдай жолы келесідей форматта болады: HTTP/version - версия, Status-Code – нәтижені идентификациялайтын статустың үш орынды коды және Status-Phrase – кодты түсіндіретін мәтіндік тұжырым. Статус коды броузермен пайдаланылады, ал мәтіндік тұжырым пайдаланушыға арналған.

Статус кодының бірінші саны жауаптың класын анықтауға арналған.

Кодтың бірінші санымен анықталатын бес санат бар:

1) 1хх: әзірге қолданыста жоқ, болашақта қолдануға сақталынуда.

2) 2хх: сәтті жол: шақырылу қабылданды және ол өңделуде.

3) 3хх: қайта жіберу – қолданушы шақырылуды қайта жасауы тиіс.

4) 4хх: пайдаланушының қателігі – шақырылу дұрыс өңделмеді. Егер қолданушы өзінің шақырылуын 4хх кодасы бар жауап келгенге дейін тоқтатпаса, онда ол серверге дерек жіберуді тоқтатуы керек

5) 5хх: Web-сервердің қателігі – дұрыс жасалған шақырылуға жауап бере алмады.

Келесі кестеде HTTP-дің жауап кодтары келтірілген:

Статус коды Мағынасы
ок
Post сәтті команда
Шақырылу қабылданды
Get немесе HEAD шақырылу орындалды
Шақырылу орындалды, бірақ ішіндегісі жоқ
Ресурс бірнеше жерден табылды
Ресурс мүлдем жойылған
Ресурс уақытша орнында жоқ
шақырылу өзгертілінген
Пайдаланушыдан шақырылу нашар
Анықталмаған шақырылу
Ресурс төлемін төлеу қажет
Пайдалануға рұқсат жоқ
Ресурс табылмады
Аталмыш ресурс үшін бұл әдіс қолданылмайды
Ресурстың бұл түріне рұқсат жоқ
Ресурсқа рұқсат жоқ
Сервердің ішкі қатесі
Әдіс орындалған жоқ
Сценарий бұзылған немесе сервердің жүктемесі көп болып кеткен
Серверге рұқсат жоқ/сценаридің тайм-ауты
Екінші сценарий/ сервердің тайм-ауты

Status директивасы CGI-сценариге өңдеу жағдайы туралы хабарламаны қайтаруға мүмкіндік береді. Егер бұл директива берілмеген болса, онда сервер 200 Ok көрсетеді.

Мысалы:

Status: 404 Not found

Сервер осы ақпарат негізінде тақырыпты негіздейді. Оны пайдаланушыға жібереді.. Мысалы, директивтер жиыны:

НТТР/1.0 200 ОК

Server: NCSA/1.0a6

Content-type: text/html

шақырылудың ойдағыдай орындалғанын хабарлайды.

Мұнда: 200 - код шақырылудың ойдағыдай орындалғанын білдіретін, “Ok” соны білдіреді.

Келесі директива: Content-type: text/html

егер жауап денесі бар болса, міндетті түрде орын алады. Ол серверге ары қарай HTML-құжат болатынын хабарлайды.

Ал директива:

Location: http://host/file.txtпайдаланушыменталап етілген болса, Web-сервер file.txt-ны шығарылуына әкеледі.

Сценарий жұмыстарының кезендері жоғарыда көрсетілгендей 3 бөлімнен тұрады:

1. Кіріс мәліметтерінің инициализациясы және өңделуі.

2. Жұмыстың негізгі бөлігі және пайдаланушыға шығару.

3. Өз жұмысын аяқтау.

Инициализацияны орындау барысында барлық параметрлер алдын ала белгілі (немесе оларды тану қиын емес), ал шешілетін тапсырмалар сценарийлердің кез келгеніне бірдейлеу болып келеді. Кіріс деректерін өңдеу кезеңінде орындалатындар, сценарийдің жазылу мақсаттарына байланысты. Жалпыл алғанда, кіріс деректерінің өңделуі, оларды түрлендіру болып табылады.

Жұмысты инициализациялағаннан кейін, кіріс деректері оқылып, олардың жеке айнымалыларға бөлінгенінен кейін, сценарий жұмыстың негізгі бөлігінің орындалуға дайын болады. Жұмыстың бұл бөлігінде сценарий деректерді шығаруға дайындайды және қадамдары инициализация кезеңіндегідей онша қаттаң регламенттенбейді. Барлық орындалатын әрекеттер қойылған мақсаттармен анықталады. Деректерді өңдеу CGI-да күрделі емес болғандықтан, ал сценарийді құрудың мақсаты үнемі кейбір шығу ақпаратын дайындау болып табылады. Сол себепті, кіріс деректерін өңдеу және шығыс деректерін дайындалудың формалданған қадамдары программаның бір фазасына бірігеді.

Нәтижелердің шығарылуы. Қарапайым CGI-сценарийінде шығу ақпараты, тек тақырып және HTML текстен тұрады. Күрделірек сценарийлер кейбір қосымша деректер енгізілген сценарийді қайта шақыруға қажетті графиканы, мәтінді графиканы немесе жалпы барлық ақпаратты шығара алады.

Аяқтау дегеніміз барлық пайдаланған ресурстардан босатылу, тазалануы және программадан шығарылуы болып табылады. Егер бос жадының немесе басқа объектілердің бөлінуі орындалған болса, олардың да босатылуы қажет. Олай істелінбеген жағдайда жүйенің барлық ресурстары жойылып немесе құлыптанып қалуы және басқа сценарийлердің немесе жалпы сервердің жұмысы тоқтап қалуы мүмкін. Платформалардың көпшілігінде файлдар мен жадындағы объектілер автоматты түрде жабылады да, оларды пайдаланған процесс біткеннен кейін операциялық жүйемен жабылады. Бірақ бұл жағдайда ресурстарды босату барысында толығымен операциялық жүйеге сүйену дұрыс емес.

Әдебиет: 1 нег. [20-26], 2 нег. [80-98], 7 қос.[100-117], 9 қос.[211-234]

Бақылау сұрақтары:

1. CGI интерфейсінде орталардың айнымалылары қандай ақпараттардан тұрады?

2. Сервер мен сыртқы программаның өзара қатынас интерфейсінде get әдісі үшін кіріс деректер қалай өңделеді?

3. Сервер мен сыртқы программаның өзара қатынас интерфейсінде post әдісі үшін кіріс деректер қалай өңделеді?

4. Сыртқы программамен кіріс деректерін өңдеу жұмысының кезеңдері қандай?

5. Сервер мен сыртқы программа өзара қатынас интерфейсінде post сценарийін шығару тақырыбы қандай ақпарат әкеледі?

Наши рекомендации