Больше, чем извлечение файлов
Описанная последовательность действий чрезмерно упрощена, но ее цель – описать работу, выполняемую многими Web-серверами.
Конечно же, путешествуя по Web, легко осознать, что Web – это гораздо больше, чем набор статических документов, которые Web-сервер посылает на запросы Web-браузеров. Для запроса информации с сервера или предоставления информации организации-владельцу сервера могут использоваться формы. Можно заказать товары, проверить кредитные карточки и выполнить другие самые разнообразные деловые операции.
Для выполнения таких функций современные Web-серверы должны не только отвечать на HTTP-запросы. Web-серверы обычно обеспечивают два механизма взаимодействий.
- Интерфейс простого шлюза (CGI, Common Gateway Interface).
- Программный интерфейс приложений сервера (APIs, Application Program Interfaces).
Интерфейс простого шлюза (CGI – Common Gateway Interface)
Для придания интерактивности Web-серверу наиболее широко применяется механизм CGI. При использовании CGI к HTTP-протоколу добавляется очень простое расширение для запроса статических файлов.
CGI обеспечивает стандартизованный метод запуска программы на сервере и передачи программе данных из формы на обработку. Эти программы можно писать практически на любом языке программирования или сценариев. Обычно используются С, Perl и Java.
Когда пользователь запрашивает CGI-программу (возможно, при предоставлении заполненной формы или щелчке на ссылке к программе) Web-сервер передает данные пользователя CGI-программе и ожидает, пока программа вернет результат. Данные, возвращенные CGI-программой, сразу же передаются клиенту тем же образом, каким возвращается браузеру содержимое статического файла. Правильное формирование данных, возвращаемых браузеру, и обработка непредвиденных обстоятельств входит в задачу CGI-программы.
В целом, технология CGI разработана достаточно хорошо. Простота метода передачи данных от сервера в CGI-программу и способ построения результирующих данных, которые программа возвращает серверу, означает, что можно создавать несложные CGI-программы, не имея большого опыта программирования.
Изменять и тестировать CGI-программы несложно, так как для их написания можно использовать популярные языки сценариев, например Perl.
То, что CGI-интерфейс является стандартом, означает, что сценарий CGI или программа, написанная для одного Web-сервера Linux, будет выполняться на любом другом Web-сервере Linux. Возможно, этот сценарий или программа будут выполняться и на любом другом сервере Unix, если они написаны на языке, интерпретируемом в соответствующих операционных системах.
Несмотря на все преимущества, CGI имеет серьезные недостатки, делающие его непривлекательным для некоторых Web-сайтов. Два главных недостатка относятся к категориям безопасности и скорости.
С момента появления Web в интерфейсе CGI были обнаружены значительные просчеты, позволяющие опытному злоумышленнику получить доступ к системе с Web-сервером, если сценарий плохо написан. Поэтому, использование CGI нежелательно на тех Web-серверах, где безопасность данных является первостепенной задачей – на большинстве корпоративных Internet и Intranet-серверов и особенно на сайтах, которые реализуют финансовые операции и продажу по кредитным карточкам в режиме on-line.
Интерфейс CGI не очень эффективен. Web-сервер запускает один или несколько процессов, которые отвечают на запросы клиента. Браузер запускает дочерние процессы для CGI-программы. передает данные новому процессу и ожидает его завершения. На загруженном сайте это может привести к большому числу новых процессов, нуждающихся в запуске за короткий период времени, особенно если CGI-сценарии используются интенсивно. Каждый запрос для CGI-программы приводит к запуску отдельного процесса.
Этот неэффективный способ обработки большого количества данных и запросов является причиной того, что многие ведущие Web серверы снабжены собственными API (Application Program Interfaces – Программный интерфейс приложений) для написания программ сервера.
Программный интерфейс приложений (API – Application Program Interface)
Программные интерфейсы приложений (API) предоставляют методы написания программ, хорошо интегрированных в Web-сервер и не требующих новых процессов для каждого запроса.
API позволяет разрабатывать Web-приложения для обработки большего количества запросов по сравнению с аналогичными CGI-решениями. Кроме того, API-методы меньше критикуются в отношении безопасности.
API-программы обычно выполняют те же функции, что и CGI-программы, например обработку информации, содержащейся в формах, доступ к базам данных и проверку кредитных карточек.
Наибольшим недостатком API является то, что они привязывают приложение к конкретному Web-серверу. Перенос приложения на другой сервер может потребовать значительных изменений в программе и, чаще всего, для больших приложений невозможен.
Помните: сервер должен быть хорошо протестирован на предмет безопасности, производительности и гибкости перед созданием на сервере большого приложения, использующего встроенный в сервер API.