Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
CGI - технология.
Основу WWW составляют веб-узлы - ПК, на которых выполняется специальная программа - веб-сервер, ожидающая запроса со стороны клиента на выдачу документа. Документы хранятся на веб-узле в формате HTML. Клиентом веб-сервера является программа-браузер, выполняющаяся на удаленном ПК, которая осуществляет запрос к веб-серверу, принимает запрошенный документ и отображает его на экране.
Стандартный язык разметки HTML позволяет легко и быстро создавать веб-страницы, передаваемые по сети Интернет. Это удобный инструмент, но, загружаемые в окно браузера страницы - статичны. Пользователь не может менять их содержимое, не может взаимодействовать с ними. Для придания динамичности HTML страницам был предложен и реализован ряд технологий, оживляющих и создающих реагирующие на действия пользователя HTML-документы. CGI-сценарий - одна из первых таких технологий. Это программа, инициализируемая на сервере при передаче на него информации из полей форм HTML, создаваемых тэгом <FORM>…</FORM>.
CGI - Common Gateway Interface (интерфейс общего шлюза). Это часть веб-сервера, которая может взаимодействовать с другими программами, выполняющимися на этом же веб-узле. В этом смысле является шлюзом для передачи данных, полученных от клиента программами обработки (СУБД, электронными таблицами, графическими приложениями).
CGI включает общую среду (набор переменных) и протоколы для взаимодействия с этими программами.
Схема работы CGI.
HTML-формы.
HTML-формы предназначены для пересылки данных от удаленного пользователя к веб-серверу. С их помощью можно организовать простейший диалог между пользователем и сервером.
Дополнительные параметры: CLASS, NAME, STYLE.
Документ может содержать несколько форм, но они не могут быть вложенными друг в друга.
Значением этого параметра является медиатип, определяющий формат кодирования данных, при передаче их от браузера к серверу. Браузер кодирует данные, чтобы исключить их искажения в процессе передачи.
Электронная почта - одно из первых приложений Интернет. Ориентировано на пересылку текстовых сообщений, но часто возникает необходимость вместе с текстом переслать данные в нетекстовом формате (zip-файл, рисунок). Для пересылки этих файлов без искажения средствами электронной почты, их кодируют в соответствии с некоторым стандартом.
Стандарт MIME - Multipurpose Internet Mail Extensions (Многоцелевые расширения электронной почты для Интернета). Определяет набор MIME-типов, соответствующих различным типам данных, и правила пересылки их по электронной почте.
Для обозначения MIME-типа используется запись вида: тип/подтип.
Тип определяет общий тип данных. Например, application, text, image.
Подтип определяет конкретный формат внутри типа данных (application/zip, image/gif, text/html).
MIME-типы нашли применение в веб, где они называются медиатипами для идентификации формата документов, передаваемых по протоколу http.
В HTML-форме параметр ENCTYPE определяет медиатип, используемый для кодирования и пересылки специального типа данных - содержимого формы.
Если в форме присутствует элемент для ввода имени локального файла (TYPE = FILE), то этот файл присоединяется к содержимому формы при пересылке на сервер. Для корректной передачи этого файла нужно установить значение параметров формы равными:
ENCTYPE = "multipart/form-data"
METHOD = POST
Иначе будет передана введенная строка, т.е. маршрутное имя файла, а не его содержимое.
Кодирование и пересылка данных формы в запросе.
Взаимодействие между клиентом-браузером и веб-сервером осуществляется по правилам протокола http и состоит из запросов клиента и ответов сервера.
Запрос клиента разбивается на три части:
Метод сообщает серверу о целях запроса. В протоколе http определены несколько методов, но для передачи формы в cgi-программу используются 2 метода GET и POST.
Метод GET. Данные формы пересылаются в составе URL-запроса, к которому присоединяются после символа "?".
Метод POST. Данные формы пересылаются в теле запроса.
Схема кодирования данных из формы одинакова для обоих методов и заключается в следующем:
GET:
<FORM METHOD = "GET" action = "/cgi-bin/registrat.cgi">
GET /cgi-bin/registrat.cgi?regname=Bob&password1=asd&password2=asd&age=lt20&language=russian&format=HTML&wish=%F6%C5%CC HTTP1.0 (заголовки запроса, сообщающие серверу информацию о клиенте)
<пусто> (тело запроса)
content_length - сообщает серверу количество байт, переданных в теле запроса.
При использовании метода GET веб-сервер, получив запрос присвоит переменной среды QUERY_STRING значение строки запроса и вызовет cgi-программу, обозначенную в первой части URL до знака вопроса.
cgi-программа после запуска обращается к переменной QUERY_STRING для обработки закодированных в ней данных.
При использовании метода POST значение content_length:126 присваивается глобальной переменной CONTENT_LENGTH, а данные пересылаются в стандартный ввод cgi-программы (STDIN).
CGI-сценарий.
Назначение - создать новый html документ, используя данные, содержащиеся в запросе и передать его обратно клиенту. Если такой документ уже существует, то передается ссылка на него.
Свойства языка CGI-программирования:
Выбор языка зависит и от операционной системы веб-сервера. Большинство узлов работает под ОС UNIX, в которой очень распространено использование скриптов (текстовых командных файлов, представляющих собой программы, состоящих из обращений к командам ОС и управляющих конструкцией языка shell - командной оболочки UNIX).
Shell - интерпретатор команд ОС. В то же время имеет встроенные средства, характерные для языков программирования, а именно строковые переменные и управляющие конструкции.
Shell выполняет командные файлы как интерпретатор, т.е. считывает из файла и выполняет команды одну за другой с учетом управляющих конструкций, не преобразуя исходный текст в исполняемый двоичный код.
Языки с интерпретаторами:
Perl. Наиболее распространен для написания cgi-сценариев, т.к. обладает следующими полезными средствами:
Ответ сервера состоит из следующих трех частей:
Обработка данных cgi-программы.
Пример формирования cgi-сценария.
1) #!/usr/bin/perl
print "Привет! \n"
Первая строка сообщает местонахождение интерпретатора perl, а вторая строка - функция print, выводит сообщение в стандартный вывод stdout.
2) сохраняем текст программы в файле hello.pl
3) запуск программы на выполнение:
perl hello.pl
4) преобразование программы в cgi-сценарий и сохранение его в файле hello.cgi
#!/usr/bin/perl
print "Content-type: text/html \n\n";
print "\n";
print "\n";
print "<h2>Привет!</h2>\n";
print "\n"
5) помещаем cgi-программу в каталог cgi-программ веб-сервера, а затем обращаемся к ней из браузера, который отобразит html-документ, созданный этой программой.
Серверные расширения CGI (Common Gateway Interface - стандартный шлюзовый интерфейс) и ISAPI (Internet Server API, также NSAPI - Netscape Server API) предназначены для запуска внешних программ под управление WEB-сервера; внешняя программа получает информацию через протокол HTTP от удаленного пользователя, обрабатывают ее (например, осуществляют запрос к базе данных) и возвращают результат обработки обратно в виде ссылки на существующий HTML-документ или в виде динамически созданной HTML-страницы.
Передача информации от удаленного пользователя происходит следующим образом
· В создаваемом для ввода информации документе HTML размещается форма ввода, состоящая из необходимых органов управления (полей редактирования текстовой информации, переключателей, списков и др., каждому органу управления присваивается произвольное имя; в форме должна присутствовать кнопка, нажатие которой инициирует передачу информации из полей формы на сервер).
· Данные поступают на сервер и обрабатываются (возможно, весьма изощренными) приложениями CGI или ISAPI.
· CGI/ISAPI-приложение генерирует (обычно динамически) HTML-документ (файл) и пересылает его обратно удаленному пользователю (где этот документ интерпретируется и визуализируется броузером).
Ниже приведен пример HTML-кода простой формы с двумя полями ввода (имена полей ‘text1’ и ‘text2’) и кнопкой для отс ы лки сообщений серверу
Образец простейшей формы
< FORM METHOD=GET ACTION=“http://www.my_server.ru/cgi/form.exe”>
<TABLE border=0>
<TR>
<TD>Имя:</TD>
<TD><INPUT TYPE=text NAME="text1" VALUE="Текст 1" size=33>
</TD></TR>
<TR>
<TD>Пароль: </TD>
<TD><INPUT TYPE=text NAME="text2" VALUE="Текст 2" size=33>
</TD></TR>
<TR>
<TD> </TD>
<TD><INPUT TYPE=submit VALUE="Послать данные серверу">
</TD></TR>
</TABLE>
</FORM>
На рис.1 показано отображение этой формы броузером (хорошо видны два поля ввода и кнопка отс ы лки введенных в эти поля данных на сервер).
Параметр ACTION описания формы определяет действие, выполняющееся над присланной на сервер информацией (в данном случае указан путь к программе CGI, которая будет выполнять обработку данных). Параметр METHOD выбирается один из двух методов передачи данных серверу WWW - при значении этого параметра GET указанная в параметре ACTION программа CGI получит данные из формы через переменную среды с именем QUERY_STRING, в случае METHOD=POST программа CGI получит данные из формы через стандартный поток ввода stdin.
С целью использования языков программирования, не поддерживающих (в явном виде) стандартных потоков ввода и вывода (например, Pascal) разработана спецификация WinCGI, согласно которой в передаче данных используются привычные для Windows инициализационные файлы [6].
Возможна прямая пос ы лка серверу строки query-string в соответствие со следующим URL (через знак вопроса после имени обрабатывающей запрос CGI-программы указывается пересылаемая строка)
http://www.my_server.ru/cgi/search.exe?query-string
При использовании METHOD=GET данные формы поступают на сервер в виде значения переменной среды QUERY_STRING в следующем формате:
Имя1=Значение1&Имя2=Значение2&Имя3=Значение3
Здесь в качестве имен используются значения параметров NAME формы, вместо значений подставляются данные из соответствующих именам полей. Программа CGI должна просканировать содержимое текстовой строки переменной cред ы QUERY_STRING и по имени поля найти нужное значение, введенное в это поле пользователем. Адрес заданной строки переменной среды в программе легко получить с помощью C-функции getenv
char * szQueryString;
szQueryString = getenv("QUERY_STRING");
Рис..1. Отображение простейшей формы броузером.
Передаваемая в переменной среды QUERY_STRING строка закодирована с использованием т.н. кодировки URL (символы пробелов заменяются на символ ‘ +’, для представления кодов управляющих и некоторых других символов используется конструкция вида %xx, где хх - шестнадцатиричный код символа в виде двух ASCII-символов); CGI-программа должна выполнить обратную перекодировку.
При использовании METHOD=POST программа CGI получает данные из формы через стандартный поток ввода stdin (для чтения удобно использовать С-функции fread или scanf) в аналогичном методу GET формате, причем количество байт в stdin передается CGI-программе через переменную среды с именем CONTENT_LENGTH
Дата публикования: 2015-09-17; Прочитано: 970 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!