- Apache и Apache Tomcat (Sun Microsystems);
- разработка Игоря Сысоева - Nginx;
- разработка компании Microsoft - IIS (Internet Information Services).
Но помимо этого есть и альтернативные разработки: Ascet HTTPd, CERN httpd и другие. С таким списком можно ознакомиться на Wiki.
Лично для меня архитектура и логика работы веб - сервера вызывает интерес.
Все мы знаем, что многоликий интернет базируется на работе раскинутых веб - серверов, связанных между собой в глобальную сеть за счет различных сетевых устройств. Например - роутеров, маршрутизаторов, коммутаторов и тому подобное. Опустим технические нюансы. Потребители интернета со своих машин также подключены к этой сети. И через соответствующие сетевые программы, так называемые - User-agent - браузеры (от англ. browse - проссматривать) просматривают (точнее - запрашивают) веб - странички, которые располагаются на веб - серверах. Помимо содержания веб - страниц, веб - сервер может содержать и скриптовую часть. Мини-экскурс :) Но я пошел дальше.
Как можно разработать свой веб - сервер на C/C++?
Для этого воспользуемся прикладным интерфейсом - Windows Socket API (Winsock).
Прежде, чем приступать к программированию на данном интерфейсе, рассмотрим общие характеристики веб - серверов:
- в простейшем случае используют http - протокол и зарезервированный порт - 80, 8080;
- сервер принимает запросы от браузеров и отправляет им ответы в строго определенном виде. Определение запросов и ответов представлены в специальных документах, так называемым - Internet Request For Comment (RFC), в частности - RFC 2086. Рассмотрим пример диалогов HTTP (более подробно можно ознакомиться на Wiki).
Запрос клиента:
GET /wiki/страница HTTP/1.1 Host: ru.wikipedia.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509
Firefox/3.0b5 Accept: text/html Connection: close (пустая строка)
Ответ сервера:
HTTP/1.1 200 OK Date: Wed, 11 Feb 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close (далее следует запрошенная страница в HTML)
Отсюда видна структурированность HTTP диалога между клиентами и веб - серверами.
Так как мы рассматриваем разработку серверной стороны, стоит более внимательно
посмотреть на процесс формирования ответа сервера на сторонние запросы. Для
этого приведем схему;
- GET и POST методы передачи данных на сервер;
- скриптовая часть. Для этого организовываются внешние потоки, в которых происходит инициализация внешних скриптов на основе cgi, php, perl и даже bat - файлов;