o заявката за обслужване се инициира обикновено от WAP клиента (браузера) и съдържа информация както за викания обект (URL), така и за браузера
o заявката се предава от шлюза към съответния WWW сървер като HTTP хедър-блок за заявка (header)
o сърверът изпълнява адресирания CGI скрипт (вместо да го изпрати на клиента какъвто би бил случая с заявка към WML документ)
o полученият резултат – напр. WML генерация – се изпраща от сървера към шлюза отново като HTTP блок (за отговор)
o шлюзът конвертира получения документ в двоичен код и го предава на браузера
o браузерът използва информацията от HTTP блока при интерпретацията на получения документ
WAPклиент
Прокси сървер/ шлюз
WWW сървер
WAP
Браузер
заявка (дв.код)
декоди-
ране
коди-
заявка
сWMLScript
ъ
робръщение
в
еCGI
Data- base
exe, dll,
отговор (дв.код)
ране
съдържание
ррезултат
(WML)
скрипт
com.
5. WWWсървер и CGI
o освен че стартира CGI интерпретацията, сърверът предава към скрипт процеса също и информацията от HTTP блока, така че скрипта може да идентифицира източника на заявката (евентуално и други данни)
o след получаване на резултата, сървера го разполага в HTTP блок и го предава към шлюза
o възможно е формирането на блока и предаването му към шлюза да бъде осъществено от скрипта вместо от сървера
o с или без участие на сървера скрипт програмата генерира освен резултата също и т.нар. хедър блок (вж. т. 8.)
Стр. 2 от 6
WAP/WML 10
o тъй като HTTP не поддържа информация за предходни заявки, всяка заявка поражда не повече от един отговор
o НТТР дефинира следните методи-заявки: CHECKIN, GET, HEAD, CHECKOUT, SHOWMETHOD, PUT, POST и TEXTSEARCH, от които GET и POST са дефинирани и при WAP архитектурата, така че те се прилагат в WAP-CGI програмирането
6.Метод GET
o този метод се използва за заявяване на документ от сървера при команда на потребителя за отваряне на нов WML документ или за обръщение към CGI скрипт; във втория случай отговорът е или WML генерация или съобщение за грешка или връзка към друг адрес (документ)
o GET се прилага само при еднократна генерация на съдържание – т.е. заявка към скрипта за извличане на определено съдържание от даден файл и предаването му към клиента)
o CGI скрипта установява типа заявка по съдържанието на системната променлива REQUEST_METHOD, което в този случай е “GET”, а стойностите на формите – от системната променлива QUERY_STRING
o при този метод URL (некодиран) и останалата информация от заявката (кодирана) се изпращат съвместно
o адресацията е видима и адресът може да се съхрани в списъка с важни адреси и в стека за посетени адреси
o с GET се обменят само къси низове – напр. не повече от 255 символа, което може да създаде проблем при по-дълги URL
7. Метод POST
o този метод се използва при предаване на данни към обект с определен URL адрес – най-често това са данните от потребителските форми, въведени с командите и
o предаването на данните се извършва не заедно с URL адреса, а през отделен канал за обмен н съответствие с HTTP метода POST
o предаването с метода POST ползва системните променливи REQUEST_METHOD, чиято стойност указва метода на предаване и получава стойност “POST”, и CONTENT_LENGTH, която съдържа броя на предаваните байтове
o приемането на данните става чрез стандартния вход (stdin) вместо чрез системни променливи, от където [скрипт-]програмата прочита съответния брой кодирани байтове; дължината не е ограничена както при GET
o адресната инфорамция не се съхранява в списъка с важни адреси и в стека за посетени адреси
o след изпълнение на програмата (независимо дали заявката е използвала GET или POST) резултатът се предава към WWW сървера през стандартния изход [след което сърверът модифицира HTTP хедъра и предава полученото съдържание към браузера чрез WAP шлюза]
8. Хедър-блок
o хедър-блокът съдържа информация, която се предава от CGI скрипта към сървера
(или директно към шлюза) заедно с (и предхождайки!) заявеното съдържание (което е или скрипт код за интерпретация от сървера или инструкция за извличане на съответен документ или генериран документ)
Стр. 3 от 6
WAP/WML 10
o при WAP форматът на този хедър е аналогичен на НТТР хедъра и съдържа следните текстови редове:
o редове с директиви за сървера (които са Content_Type, Location и Status)
o редове, които не съдържат сърверна директива и подлежат на предаване на клиента без интерпретация от сървера
o празен ред (т.е. CR/LF) за край на хедъра
o директивата Content_Type задава типа на съдържанието съгл. MIME
o директивата Location връща на браузера URL на документ (като отговор на заявката) по формат Location:url, последван от празен ред; предаването на този документ към браузера се осъществява от сървера (не от скрипта)
o директивата Status (!N.B.: тя е алтернатива на Location) съдържа стандартния НТТР
код на отговор, който да бъде предаден на браузера – напр:
o CGI ползва основно следните системни променливи: REQUEST_METHOD, QUERY_STRING,
CONTENT_LENGTH и CONTENT_TYPE
o REQUEST_METHOD индикира метода, който се използва за извършване на текущата операция на обмен – за HTTP това са методите GET и POST – и съответно къде се съдържат аргументите на операцията: при GET в системната променлива QUERY_STRING, а при POST – в системния вход
o при метод GET параметрите на адреса, които следват URL след въпросителен знак, се съхраняват като единичен символен низ в QUERY_STRING; форматът им е като този на URL – специалните символи (шпация, нов ред) са представени в шестнайсетичен код
(%hh)
o при метод POST дължината на низа за четене от системния вход се съдържа в
CONTENT_LENGTH (поради което този низ може да не съдържа специален символ за край
– eof)
o при метод POST също така се указва типа данни – в системната променлива CONTENT_TYPE, чието съдържание в случая е application/x-www-form-urlencoded – включително и когато се предва WML документ
o някои сървери дефинират и други системни променливи (извън CGI стандарта) но тяхната употреба ограничава преносимостта на кода
10. WML форми и CGI скрипт
o формите съдържат текстови полета и/или избраните от потребителя стойности в изборни списъци, които – съответно на приложението – могат да се предават към скрипто програмите
o данните от една или повече форми се предават едновременно към съответния сървер, който активира посочения скрипт за тяхната обработка (и който съставлява сърверната част от съответното WAP приложение)
o приложенията с такава архитектура варират от системите за търсене до приложения за електронна търговия, банкиране и т.н.; скрипта използва данните от формите както и
(в повечето случаи) информация от базите данни за да генерира нова страница или списък от хипревръзки, които се връщат като резултат към браузера (вж. т. 12.)
o съгласно тт. 11.-12. от лекция 5. href атрибутът на заданието съдържа URL адреса на скрипта, който се извиква и който получава потребителските данни след попълване на полетата и натискане на бутон (обикновено с етикет Submit), а атрибутът
Стр. 4 от 6
WAP/WML 10
method указва метода на предаване – GET или POST; за кодирането на информацията в тези заявки вж. сл. т. 11.
11. Потребителски данни
o те представляват единични URL-кодирани символни низове (в QUERY_STRING или в стандартния вход) и се състоят от двойки идентификатор-стойност с разделител “&”, при което например шпациите са заменени с “+”
o за обработване на потребителските данни от WML-форми е необходима най-напред низът да бъде разделен на съставните двойки идентификатор-стойност като
o идентификаторът обикновено е стойността на атрибута name от форматиращата
o скриптът предава резултат към сървера заедно с форматиран хедър (parsed header);
със следната структура:
o ред за типа на съдържанието, съдържащ идентификатора на съответната променлива – CONTENT_TYPE, разделител двоеточие («:») и спецификатор на типа съгл. MIME
o поне един празен ред като разделител между хедъра и съдържанието
o предавания документ
o пример: генериране на форматиран хедър от CGI стрипт (Perl-код)
print “Content-Type: text/vnd.wap.wml\n\n”
o сърверът добавя код за успешно изпълнението на заявката 200 (коректна заявка и успешно откриване/генериране на заявения документ) и предава резултата към шлюза o в някои случаи скриптът генерира код на изпълнението вместо сървера и тогава се използва неформатиран хедър (non-parsed header) т.е. сърверът не прави разбор на хедъра и не генерира код, а го предава направо към браузера; скрипт програма, която ползва неформатиран хедър, има идентификатор, започващ с nph- (което е указание
за сървера да не генерира и добавя код за изпълнение в хедъра)