Веб-сервер с функциональностью CGI
Содержание
Метаданные
ID проекта: cgi
Презентация проекта: http://1drv.ms/1VmeBQ0
Ментор проекта: Виктор Яковлев
Аккаунты ментора в git-сервисах:
- GitHub.com: victor-yacovlev
- GitLab.com: v-yacovlev
- BitBucket.org: victor_yacovlev
Что это за проект
Введение
Веб-серверы - это программы, которые работают на физических серверах и обеспечивают выдачу содержимого браузерам.
Common Gateway Interface (CGI) - простой интерфейс взаимодействия между веб-сервером и сторонними программами, генерирующими динамический контент. В отличии от веб-фреймворков, используется там, где нужна очень простая функциональность.
Что требуется
Реализовать веб-сервер, функционально аналогичный старым версиям Apache.
Требования к серверу:
1. Обслуживать много клиентов
2. Уметь выполнять CGI-программы и выдавать динамический контент
Чему вы научитесь (помимо разработки очередного велосипеда)
1. Устройство протокола HTTP, работа с заголовками и запросами
2. Основам параллельного программирования
3. Умение разрабатывать программы для Unix-подобных систем и ориентироваться в POSIX API
Начальные требования
1. Умение разрабатывать программы на Cи или C++
Критерии оценивания
Первая контрольная точка (24 октября 2015 г.)
Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:
- Файл README.md, который содержит описание проекта, написанный в расчета на "конечного пользователя". Это описание должно быть написано самостоятельно, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.
- Реализацию TCP-сервера, который при запуске создает сокет, принимает хотя бы по одному соединению одновременно, и выводит в качестве отладочной информации (на стандартный поток вывода или стандартный поток ошибок) данные, который ему передает клиент (для тестирования можно использовать программу telnet).
- Для тех, кто реализует проект на Си/C++, - проектный файл CMakeLists.txt.
Вторая контрольная точка (14 ноября 2015 г.)
Необходимо иметь режиме веб-сервер, который умеет выдавать статические страницы и запускать сторонные CGI-программы с помощью fork().
Итоговая оценка
- 4 балла. Реализован веб-сервер, который умеет выдавать статические страницы и обслуживать одновременно несколько подключений
- 6 баллов. Помимо выдачи статического содержимого, сервер умеет выполнять сторонние программы и выдавать результат их работы
- 9 баллов. Реализована функциональность прерывания работы и изоляции потенциально опасных CGI-скриптов.
- +1 балл. Реализована поддержка POST-запросов
- +1 балл. Сервер оформлен в виде системной службы для systemd
- +2 балла. Использование как многопроцессной, так и многопоточной работы для обеспечения оптимального использования системных ресурсов
- +2 балла. Реализация обработки запросов с помощью очереди ядра.
Дополнительные материалы и методические указания
- Описание протокола HTTP на русском языке [1]
- Описание работы с CGI: [2]
Материалы с семинаров 07 и 28 ноября 2015
Материалы выложены на Яндекс.Диске