История технологий, работающих с динамическим содержимым Web
Создавать Web-приложения и Web-службы можно несколькими способами. Один из них – это использовать технологию ASP.NET. Такой подход поддерживается в разной степени большинством языков платформы NET. Есть и другой подход, поддерживаемый только языком Visual C++. Он состоит в применении сервера ATL Server [ATL Server реализован с помощью неуправляемого C++ и поэтому не относится к основной предметной области NET. Впрочем, для некоторых программистов, работающих на Visual C++ ATL является достаточно важной темой]. Остальные, традиционные подходы заключаются в использовании общего шлюзового интерфейса CGI (Common Gateway Interface), и интерфейса прикладного программирования Internet-сервера ISAPI. Преимуществом технологии ASP NET являются простота и легкость в использовании. Кроме того, поддержка этой технологии несколькими языками означает, что она доступна большему числу программистов и на большем количестве уровней квалификации. Что же касается технологии ATL Server, то ее преимущество состоит в более высокой производительности, чем у ASP.NET.
Конечно, работать с ATL Server намного легче, чем с традиционной технологией Web-разработки, реализуемой на основе C++ и называемой интерфейсом прикладного программирования Internet-сервера ISAPI (Internet Services API – API Internet-служб, т е интерфейс прикладного программирования Internet-служб). Однако от программиста технология ATL Server требует больше опыта, чем ASP NET Обычно использование ATL Server не исключает применения ASP NET и наоборот. Часто бывает так, что их возможности приходится комбинировать. И поскольку с библиотекой шаблонных классов ATL работать труднее, то в большинстве ваших Web-проектов, возможно, придется использовать ASP.NET. А где найти применение библиотеке шаблонных классов ATL? Она может пригодиться в тех нескольких областях, где по-настоящему требуется максимальная производительность.
До сегодняшнего дня было немало методик работы с динамическим содержимым Web. Самой старой из них, которая поддерживается большинством HTTP-серверов, является общий шлюзовой интерфейс (CGI). С помощью переменных среды, CGI-программа принимает данные заголовка HTTP-запроса, отправляемые с Web-браузера. Кроме того, такая программа, пользуясь перенаправленным стандартным входным потоком, принимает данные запроса через Web-сервер, а затем генерирует динамический HTML для передачи клиенту через тот же Web-сервер, используя перенаправленный стандартный выходной поток. Конечно, применение переменных среды, стандартных входного и выходного потоков является способом не слишком эффективным, зато работающим одинаково на большинстве Web-серверов, размещенных как в Unix, так и в Windows.
К сожалению, для каждого клиентского запроса общий шлюзовой интерфейс (CGI) создает новый процесс, а это слишком дорого обходится с точки зрения производительности и использования ресурсов. Так что эффективно обработать большое количество клиентских запросов с помощью общего шлюзового интерфейса (CGI) не удается. К тому же, Web-сервер и CGI-процесс находятся в разных адресных пространствах. Поэтому общий шлюзовой интерфейс (CGI) страдает еще и от накладных расходов, вызываемых большим количеством взаимодействий между процессами.
Что касается интерфейса прикладного программирования Internet-сервера ISAPI, который представляет собой технологию на основе информационного сервера Internet (Internet Information Server, IIS), то он решает проблемы с производительностью и масштабированием, выполняя вместо CGI-процесса встроенную в процесс динамически подсоединяемую библиотеку (DLL) интерфейса прикладного программирования Internet-сервера (ISAPI), По требованию эта библиотека загружается в адресное пространство информационного сервера Internet (IIS) и совместно используется многими W/eb-клиентами.
Интерфейс прикладного программирования Internet-сервера (ISAPI) содержит интерфейсы прикладного программирования (API), которые необходимы для доступа к клиентским запросам, и, в частности, ко входным параметрам и HTTP-заголовкам. Для чтения данных, находящихся в запросах, интерфейс прикладного программирования Internet-сервера (ISAPI) организует входной поток, а для отправки клиенту, в ответ на его запрос, динамически созданного HTML-кода – выходной поток. Такой подход намного эффективнее, чем использование общего шлюзового интерфейса CGI, потому что новый процесс не создается, и, следовательно, взаимодействие процессов на сервере не требуется. В среде Visual C++ 6.0 имеется ISAPI Extension Wizard (Мастер создания расширений интерфейса прикладного программирования Internet-сервера), предназначенный для создания на основе MFC расширений интерфейса прикладного программирования Internet-сервера.
Кроме того, там имеются проекты фильтров для интерфейса прикладного программирования Internet-сервера (ISAPI). Для работы с интерфейсом прикладного программирования Internet-сервера (ISAPI) в библиотеке MFC предусмотрен CHttpServer, исполняющий роль оболочки в интерфейсе прикладного программирования Internet-служб, а также макрос для создания карты сообщений и макросы для различных преобразований в ходе грамматического разбора.