Что такое серверный CGI-сценарий?

Попросту говоря, CGI-сценарии реализуют значительную часть того взаимодействия, с которым вы сталкиваетесь в Веб. Это стандартный и широко используемый способ программирования веб-систем и взаимодействия с веб-сайтами и основа большинства моделей разработки веб-приложений.

Существуют другие способы сделать поведение сайтов интерактивным с помощью Python как на стороне клиента, так и на стороне сервера. Мы уже познакомились с некоторыми вариантами в начале главы 12. Например, в число клиентских решений входят апплеты Jython; инструменты разработки полнофункциональных интернет-приложений, такие как Silverlight и pyjamas; технология Active Scripting в Windows; и грядущий стандарт HTML 5. На стороне сервера используются различные дополнительные технологии, построенные на основе модели CGI, такие как Python Server Pages, и веб-фреймворки, такие как Django, App Engine, CherryPy и Zope, многие из которых используют модель программирования MVC (Model-View-Controller — модель-представле- ние-поведение).

Однако в целом значительная доля операций в Веб реализована через серверные CGI-сценарии, независимо от того, созданы они вручную или частично автоматизированы применением фреймворков и инструментов. Разработка CGI-сценариев является, пожалуй, наиболее простым подходом к реализации веб-сайтов, не предоставляющим инструментов, которые часто встраиваются в большие фреймворки, таких как сохранение состояния, интерфейсы к базам данных и шаблоны. Однако разработка CGI-сценариев во многих отношениях является простейшим приемом создания сценариев, выполняющихся на стороне сервера. Как результат, они обеспечивают идеальный способ, позволяющий приступить к веб-программированию на стороне сервера. CGI-сценариев вполне достаточно для разработки простых сайтов, не требующих применения инструментов уровня предприятия, и при необходимости они могут быть усилены дополнительными библиотеками.

Притаившийся сценарий

Формально, CGI-сценарии являются программами, выполняющимися на сервере и придерживающимися общего шлюзового интерфейса (Common Gateway Interface) — модели связи между броузером и сервером, от которой CGI-сценарии берут свое название. CGI — это прикладной протокол, который используется веб-серверами для транспортировки входных данных и результатов между веб-броузерами или другими клиентами и серверными сценариями. Разобраться с протоколом CGI, видимо, удобнее исходя из предполагаемого им взаимодействия.

Большинство тех, кто путешествует по Сети и нажимает кнопки на вебстраницах, воспринимает такое взаимодействие как данность, но за кулисами каждой операции в Сети происходит масса вещей. С точки зрения пользователя, это достаточно знакомые и простые операции:

Передача

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

От вет

Предполагая, что с вашим соединением с Интернетом и компьютером, с которым вы взаимодействуете, все в порядке, вы в итоге получает ответ в виде новой веб-страницы. Это может быть просто подтверждение (например, «Спасибо за сделанный вами заказ») или новая форма, которую опять нужно заполнить и отправить.

И верите вы или нет, но эта простая модель лежит в основе всей кипучей жизни в Сети. Но внутри все несколько сложнее. В действительности здесь функционирует изощренная архитектура клиент/сервер, базирующаяся на сокетах, — веб-броузер, выполняющийся на вашем компьютере, является клиентом, а компьютер, с которым вы связаны через Интернет, является сервером. Рассмотрим снова схему взаимодействия со всеми внутренними деталями, обычно невидимыми для пользователей.

Передача

После заполнения страницы с формой в веб-броузере и нажатия кнопки передачи веб-броузер незаметно для вас пересылает информацию через Интернет на сервер, указанный в качестве получателя. Сервер обычно является удаленным компьютером, расположенным в другом месте как кибернетического, так и реального пространства. Он указан в адресе URL, к которому происходит обращение, — строка адреса в Интернете, находящаяся в верхней части окна броузера. Целевые сервер и файл могут быть явно указаны в адресе URL, но чаще они указываются в разметке HTML, описывающей саму страницу для передачи, — в гиперссылке или в параметре action тега формы HTML.

Каким бы образом ни был указан сервер, выполняющийся на вашем компьютере, веб-броузер в конечном счете посылает ему вашу информацию через сокет с помощью технологий, рассмотренных нами в предыдущих трех главах. На компьютере сервера постоянно выполняется программа, называемая HTTP-сервером, которая ждет на сокете поступления данных от броузеров или других клиентов, обычно на порту с номером 80.

Обработка

Когда ваша информация оказывается на компьютере сервера, программа HTTP-сервера сначала должна обнаружить ее и решить, как обработать запрос. Если запрашиваемый адрес URL указывает просто на веб-страницу (например, URL, оканчивающийся на .html), HTTP-сервер открывает указанный HTML-файл на компьютере сервера и возвращает его содержимое броузеру через сокет. На стороне клиента броузер читает разметку HTML и строит на ее основе страницу, которую вы видите.

Но если запрашиваемый броузером адрес URL указывает на вы пол- няемую про грам му (например, если URL оканчивается на .cgi или .py), HTTP-сервер для обработки запроса запускает ее на компьютере сервера, переадресует данные, поступающие от броузера, в поток ввода stdin указанной программы и устанавливает для нее переменные окружения и аргументы командной строки. Обычно программа, запускаемая сервером, является CGI-сценарием — она выполняется на удаленном компьютере сервера, находящегося где-то в киберпространстве и, как правило, не на вашем компьютере. С этого момента вся ответственность за обработку поступивших данных ложится на CGI-сценарий — он может сохранить ваши данные в базе, выполнить поиск, списать средства с вашей кредитной карточки и так далее.

От вет

В конечном итоге CGI-сценарий выводит разметку HTML, а также несколько строк заголовков, чтобы создать в вашем броузере новую страницу ответа. При запуске CGI-сценария HTTP-сервер должен обеспечить соединение стандартного выходного потока stdout сценария с сокетом, на котором броузер ждет данных. Благодаря этому разметка HTML, выводимая CGI-сценарием, передается через Интернет вашему броузеру и создает новую страницу. Разметка HTML, выводимая CGI-сценарием, действует точно так же, как если бы она хранилась и считывалась из файла, — она может описывать простую страницу ответа или совершенно новую форму для получения дополнительной информации. Поскольку разметка генерируется сценарием, она может включать информацию, определяемую динамически, на основе запроса.

Иными словами, CGI-сценарии представляют собой нечто вроде обработ- чи ков обрат но го вы зо ва для генерируемых веб-броузерами запросов, которые обуславливают динамическое выполнение программ. Они автоматически запускаются на компьютере сервера в ответ на действия в броузере. Хотя CGI-сценарии получают и посылают стандартные структурированные сообщения через сокеты, CGI более похож на процедурное соглашение высокого уровня для обмена информацией между броузером и сервером.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий