Владивостокский государственный университет экономики и сервиса Институт информатики инноваций и бизнес систем Владивосто

Содержание

Слайд 2

Тема 6 CGI и веб-программирование

Тема 6

CGI
и
веб-программирование

Слайд 3

Содержание: 1) Интерфейс CGI, его задачи и функции 2) Исполнения CGI-скриптов

Содержание:

1) Интерфейс CGI, его задачи и функции
2) Исполнения CGI-скриптов
3) Структура URL

и кодирование данных запроса
4) Переменные окружения CGI.
5) Программирование CGI-скриптов
6) Введение в Perl
Слайд 4

Интерфейс CGI представляет собой спецификацию взаимодействия веб-сервера и внешней программы, которую

Интерфейс CGI представляет собой спецификацию взаимодействия веб-сервера и внешней программы,

которую веб-сервер запускает для обработки запроса. CGI определяет каким образом данные, предоставленные клиентом в запросе, передаются программе, как программа возвращает сгенерированный HTML-контент серверу, и какие переменные окружения устанавливаются сервером при запуске программы.

Основная концепция

Слайд 5

Клиент может запросить у веб-сервера как документ-файл с диска, так и

Клиент может запросить у веб-сервера как документ-файл с диска, так

и документ, динамически формируемый некоторой внешней программой (как правило - в зависимости от данных, предоставленных пользователем при заполнении формы).
Интерфейс CGI представляет собой спецификацию взаимодействия веб-сервера и внешней программы, которую веб-сервер запускает для обработки запроса. (Внешняя программа, вне зависимости от своей природы, часто называется CGI-скриптом.)
Слайд 6

Данные из заполненной клиентом HTML-формы могут передаваться на сервер двумя методами:

Данные из заполненной клиентом HTML-формы могут передаваться на сервер двумя

методами: GET и POST, это определяется параметром method соответствующего тэга
.
В первом случае (GET) данные присоединяются после вопросительного знака в конец URL, указанной в параметре action, во втором случае - передаются в теле запроса - в секции, предназначенной для данных (следует после всех заголовков и пустой строки).
Слайд 7

Content-Type: text/html Hello, world Например, вывод CGI-программы

Content-Type: text/html


Hello, world




Например, вывод CGI-программы

Слайд 8

ScriptAlias /виртуальный/путь/ /путь/к/каталогу/ ScriptAlias /cgi-bin/ /usr/local/www/cgi-bin/ Это означает, что для обработки

ScriptAlias /виртуальный/путь/ /путь/к/каталогу/
ScriptAlias /cgi-bin/ /usr/local/www/cgi-bin/
Это означает, что для обработки запроса

URL вида http://your.server.com/cgi-bin/dir/script будет взят не файл script из каталога DocumentRoot/cgi-bin/dir/, а запущена программа /usr/local/www/cgi-bin/dir/script.

Конфигурирование сервера Apache

Слайд 9

Для работы CGI-программ важное значение имеют части URL, называемые PATH_INFO и

Для работы CGI-программ важное значение имеют части URL, называемые PATH_INFO и

QUERY_STRING.
Рассмотрим запрос с URL вида:
http://my.server.com/cgi-bin/dir/prog/a/b?A=1&B=qwerty
PATH_INFO - /a/b
QUERY_STRING - A=1&B=qwerty

Структура URL

Слайд 10

Пары имя-значение разделяются амперсандом. Алфавитно-цифровые символы и некоторые знаки препинания, не

Пары имя-значение разделяются амперсандом. Алфавитно-цифровые символы и некоторые знаки препинания,

не имеющие специального значения (тире, подчеркивание) передаются как есть. Остальные символы кодируются в виде "%NM", где NM - двузначный шестнадцатеричный код символа.
.../prog?birthday=11%2F05%2F73&name=John+Smith
birthday - "11/05/73 "
name - "John Smith"
Слайд 11

AUTH_TYPE - Метод аутентифицирования, использованный для опознания пользователя. См. также REMOTE_USER

AUTH_TYPE - Метод аутентифицирования, использованный для опознания пользователя. См. также REMOTE_USER

и REMOTE_IDENT.
CONTENT_LENGTH - Длина данных запроса в байтах, переданных CGI-скрипту через стандартный ввод.
CONTENT_TYPE MIME - Тип данных запроса.
DOCUMENT_ROOT - Корневой каталог дерева документов веб-сервера.
GATEWAY_INTERFACE - Используемая версия CGI.

Переменные окружения CGI

Слайд 12

HTTP_ACCEPT - Список MIME-типов данных, которые клиент может принять. HTTP_FROM -

HTTP_ACCEPT - Список MIME-типов данных, которые клиент может принять.
HTTP_FROM - Адрес

электронной почты пользователя, сделавшего запрос (многие броузеры не передают такие данные).
HTTP_REFERER - URL документа, в котором находилась ссылка, вызвавшая настоящий запрос.
HTTP_USER_AGENT - Броузер клиента.
PATH_TRANSLATED - PATH_INFO, преобразованное в полный путь в файловой системе сервера

Переменные окружения CGI

Слайд 13

QUERY_STRING - Данные запроса, переданные в составе URL вслед за вопросительным

QUERY_STRING - Данные запроса, переданные в составе URL вслед за вопросительным

знаком
REMOTE_ADDR - IP-адрес клиента.
REMOTE_HOST - Имя DNS клиента.
REMOTE_USER - Аутентифицированное имя пользователя.
REQUEST_METHOD - Метод запроса (GET, POST, HEAD и т.д.).
SCRIPT_NAME - Виртуальный путь (например, /cgi-bin/program.pl) к исполняемому CGI-скрипту

Переменные окружения CGI

Слайд 14

SERVER_NAME - DNS-имя сервера или, при невозможности определить имя, его IP-адрес.

SERVER_NAME - DNS-имя сервера или, при невозможности определить имя, его IP-адрес.


SERVER_PORT - Номер порта сервера.
SERVER_PROTOCOL - Имя и версия протокола, через который был сделан запрос (например, HTTP/1.1).
SERVER_SOFTWARE - Тип и номер версии ПО веб-сервера.

Переменные окружения CGI

Слайд 15

Поскольку все HTTP-запросы независимы друг от друга и на уровне протокола

Поскольку все HTTP-запросы независимы друг от друга и на уровне

протокола HTTP отсутствует понятие сеанса связи, CGI-программа запускается заново для каждого вновь поступившего запроса, неважно имеет ли он связь с предыдущими или нет. Таким образом, существует проблема сохранения состояния логического сеанса работы пользователя между его последовательными запросами к CGI-программе. Для этого используются: cookies, сохранение состояния в базу данных, сохранение в файл, скрытые поля.

Cookies

Слайд 16

cookies - сохранение на компьютере клиента, скрытые поля - сохранение внутри

cookies - сохранение на компьютере клиента,
скрытые поля - сохранение внутри

формы, посылаемой клиенту,
сохранение в файле какого-либо формата на сервере,
сохранение в параллельно работающей базе данных.

Методы сохранения состояния

Слайд 17

При программировании CGI-скриптов всегда следует помнить, что при каждом очередном запросе

При программировании CGI-скриптов всегда следует помнить, что при каждом очередном запросе

скрипт начинает свою работу сначала, не имея никакой предыстории взаимодействия пользователя с этим или другими скриптами

Программирование CGI

Слайд 18

my $x; # $x создается, равно undef $x; # ложно defined($x);

my $x; # $x создается, равно undef
$x; # ложно
defined($x);

# ложно
$x=0;
$x; # ложно
defined($x); # истинно
$x=5;
$x; # истинно
defined($x); # истинно
$x=undef; # опять undef!
Слайд 19

Списком (list) называется упорядоченная последовательность скалярных значений; порядковые номера (индексы) начинаются

Списком (list) называется упорядоченная последовательность скалярных значений; порядковые номера (индексы)

начинаются с нуля. Отдельно стоящие списки заключаются в скобки:
($x, "abc", 15)
Обращение к элементу списка осуществляется путем указания индекса этого элемента в квадратных скобках:
$y=($x, "abc", 15)[1]; # $y="abc"

Списки и массивы

Слайд 20

if (...) {...}; условие ? выражение_да : выражение_нет ; while(...) {...};

if (...) {...};
условие ? выражение_да : выражение_нет ;
while(...) {...};

do {...} while (...);
for (...;...;...;) {...};
if ($a<$b) { $a=$b; }
while ($a<$b) { some_function($a); }
$a=$b if ($a<$b);

Операторы

Слайд 21

$x="abc"; @array=('c','d','e'); %hash=( a => "A", b=> "B"); print "this is

$x="abc";
@array=('c','d','e');
%hash=( a => "A", b=> "B");
print "this is

\$x: \"$x\"; \nthis is element 2 of \@array: \"$array[2]\";\n",
"and \$hash{a} is \"$hash{a}\"\n";
ВЫВОД:
this is $x: "abc";
this is element 2 of @array: "e";
and $hash{a} is "A"
Слайд 22

Какие действия предпринимает сервер, если для обработки поступившего запроса требуется запуск

Какие действия предпринимает сервер, если для обработки поступившего запроса требуется запуск

CGI-программы?
Почему CGI-программа должна выдавать заголовок “Content-Type:”?
Что позволяет делать модуль mod_perl?
В чем заключается основная особенность CGI-программи­рования?
В чем состоит проблема сохранения состояния в CGI-программировании и какие существуют способы ее решения? Укажите их достоинства и недостатки.
Почему язык Perl считается наиболее удобным для написания CGI-приложений?

Вопросы для самопроверки:

Слайд 23

Рекомендуемая литература: Мамаев М., Петренко С. Технологии защиты информации в Интернете.

Рекомендуемая литература:

Мамаев М., Петренко С. Технологии защиты информации в Интернете. Специальный

справочник. – СПб: "Питер", 2005.
UNIX для системных администраторов: Энциклопедия пользователя/ Пер.с англ. – Киев: ДиаСофт, 2008.
Д.Р.Левин, К.Бароди. Секреты Интернет. – К.: Диалектика, ICE, 2005.
S.Spainbour, V.Quercia. Webmaster in a Nutshell. – O’Reily & Associates, Inc., 2003.