Литмир - Электронная Библиотека

Эти новые типы использования похожи на традиционные приложения (например, программы для работы с почтой и текстовые редакторы). Отличие состоит в том, что эти приложения запускаются в браузере, а пользовательские данные хранятся на серверах в центрах обработки данных Интернета. Они используют веб-протоколы, получают информацию через Интернет, и браузер отображает пользовательский интерфейс. Преимущество такого подхода состоит в том, что пользователю не нужно устанавливать отдельные приложения, и он может получить доступ к своим данным с разных компьютеров, причем данные сохраняются у оператора сервиса. Конечно, немаловажен и тот факт, что эти приложения предоставляются крупными провайдерами бесплатно. Эта модель является распространенной формой облачных вычислений (cloud computing), при которых вычисления перемещаются с пользовательских компьютеров на совместно используемые кластеры серверов в Интернете.

Веб-страницы больше не могут быть статичными, если они должны работать как приложения. Требуется динамический контент. Например, страница библиотечного каталога должна показывать, какие книги доступны на данный момент, а какие находятся на руках и потому недоступны. Сходным образом у пользователя должна быть возможность взаимодействовать со страницей фондовой биржи, чтобы посмотреть курсы акций на разные периоды времени и вычислить прибыли и потери. Как можно понять по этим примерам, динамический контент может генерироваться программами, запущенными на сервере или в браузере (или и там, и там).

В этом разделе мы рассмотрим каждый из этих случаев по очереди. В общем, ситуация выглядит так, как показано на рис. 7.12. Например, представим себе сервис, работающий с картами, который позволяет пользователю ввести название улицы, после чего предоставляет ему карту местности. Получив запрос, веб-сервер должен использовать программу для создания страницы, которая показывает карту запрашиваемой местности из базы данных улиц и другой географической информации. Это действие показано как шаги 1-3. Запрос (шаг 1) вызывает запуск программы на сервере. Программа опрашивает базу данных и генерирует нужную страницу (шаг 2) и возвращает ее в браузер (шаг 3).

Компьютерные сети. 5-е издание - _402.jpg

Рис. 7.12. Динамические страницы

Но это не весь динамический контент. Возвращаемая страница сама может содержать программы, которые запускаются в браузере. В нашем примере программа позволяет пользователю находить маршруты и исследовать прилежащие области с разными уровнями детализации. Она обновляет страницу, увеличивая или уменьшая масштаб в соответствии с запросами пользователя (шаг 4). Чтобы провести некоторые операции, программе может понадобиться больше данных с сервера. В этом случае программа отошлет запрос на сервер (шаг 5), который отыщет нужную информацию в базе данных (шаг 6) и вернет ответ (шаг 7). Затем программа продолжит вносить изменения на страницу (шаг 4). Запросы и ответы обрабатываются в фоновом режиме; пользователь может даже не знать о них, так как URL и название страницы обычно не изменяются. Страница с программами, выполняющимися на стороне клиента, может предоставить более удобный интерфейс, чем страница, включающая только программы, выполняющиеся на сервере.

Динамическая генерация содержимого веб-страниц на стороне сервера

Давайте рассмотрим динамическую генерацию веб-страниц на стороне сервера подробнее. Простая ситуация, при которой необходима генерация страниц на стороне сервера, — это использование форм. Рассмотрим ситуацию, при которой пользователь заполняет форму заказа (см. рис. 7.11) и нажимает на кнопку Отправить заказ. Когда пользователь нажимает на кнопку, на сервер, на URL, определенный в форме, отсылается запрос (в этом случае методом POST на http://widget.com/cgi-bin/order. cgi), содержащий в себе данные, введенные пользователем. Эти данные должны быть переданы программе или скрипту для обработки. Таким образом, URL вызывает запуск определенной программы, в которую данные предоставляются в качестве входной информации. В этом случае обработка включает в себя введение заказа во внутреннюю систему AWI, обновление записей клиента и списание денег с кредитной карты. Страница, которая возвращается в ответ на этот запрос, зависит от того, что произойдет в процессе обработки. Результат не фиксирован, как в случае со статичными страницами. Если заказ успешно обрабатывается, возвращаемая страница может содержать дату доставки товара. Если запрос не был успешно обработан, возвращаемая страница может гласить, что запрашиваемых товаров нет в наличии или по какой-то причине не была принята кредитная карта.

То, как именно сервер запускает программу вместо поиска файла, зависит от устройства веб-сервера. Это не определяется самими веб-протоколами. Именно поэтому интерфейс может быть разработан в соответствии с требованиями компании-собственника сайта. Браузеру не нужно знать детали. И коли уж мы говорим о браузере, стоит отметить, что он просто создает запрос и получает страницу.

Тем не менее для веб-серверов были разработаны стандартные API, чтобы запускать программы. Существование этих интерфейсов позволяет разработчикам тратить меньше усилий на расширение различных серверов за счет веб-приложений. Мы кратко рассмотрим два API, чтобы вы получили о них некоторое представление.

API является методом обработки запросов динамических страниц. Он был доступен с момента возникновения Всемирной паутины. Он называется CGI (Common Gateway Interface общий шлюзовой интерфейс) и определен в RFC 3875. CGI предоставляет интерфейс, позволяющий веб-серверам общаться с прикладными программами и скриптами, которые могут получать данные (например, из формы) и в ответ генерировать HTML-страницы. Эти программы могут быть написаны на любом выбранном разработчиком языке, обычно с использованием скриптов для простоты разработки. Выберите Python, Ruby, Perl или другой язык, который вам по нраву.

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

В нашем примере программа order.cgi вызывается с данными, введенными в форму, как показано в листинге 7.5. Она проанализирует параметры и обработает заказ.

Полезной представляется договоренность о том, что программа вернет HTML для формы заказа, если эта форма не была заполнена. Таким образом, программа неизбежно будет знать, в каком виде представлена форма.

Второй API, о котором мы поговорим, серьезно отличается от уже описанного. Этот способ заключается во внедрении небольших скриптов в HTML-страницы. Они выполняются на сервере, в их задачу входит генерирование страницы. Популярным инструментом для написания таких скриптов является PHP (PHP:Hypertext Preprocessor — РНР:Гипертекстовый препроцессор). При его использовании требуется, чтобы сервер понимал PHP (точно так же, как браузер должен понимать CSS, чтобы интерпретировать страницы, написанные с применением таблиц стилей). Обычно серверы определяют веб-страницы, написанные на PHP, по расширению php, а не htm или html.

PHP проще использовать, чем CGI. Пример обработки формы с помощью PHP показан в листинге 7.8, а. В верхней части листинга мы видим обычную HTML-страницу с простой формой. На этот раз тег <form> указывает на то, что action.php должен быть запущен для обработки параметров после нажатия кнопки подтверждения. Форма в этом примере состоит из двух текстовых полей ввода, в одном из которых запрашивается имя пользователя, а в другом — его возраст. По окончании работы пользователя с формой на сервер отсылается стандартная строка, пример которой мы уже видели ранее. Эта строка обрабатывается, из нее извлекаются значения переменных name и age. Затем начинает свою работу скрипт action.php, показанный в листинге 7.8, б. Он генерирует ответ. Работа скрипта заключается в исполнении php-команд. Если пользователь предоставил данные «Барбара» и «24», ему будет прислан HTML-файл, код которого показан в листинге 7.8, в. Как видите, обработка форм с помощью PHP производится элементарно.

237
{"b":"639789","o":1}