Contexte & objectif
Projet de groupe : implémenter un serveur web HTTP/1.1 en C++, en n’utilisant que la bibliothèque standard (aucune lib externe). But : comprendre les fondements réseau, le protocole HTTP et concevoir un serveur non bloquant.
Fonctionnalités clés
- I/O non bloquantes avec boucle d’événements (multiplexage avec
epoll
). - Fichier de configuration : plusieurs virtual hosts, ports, routes, limites, CGI, etc.
- HTTP/1.1 : parsing de requêtes, keep-alive, envoi de réponses correctes (status, headers, body).
- Méthodes : prise en charge des cas usuels (
GET
,POST
,DELETE
). - CGI : exécution de scripts via environnement & redirection I/O.
Architecture (haut niveau)
- Event loop : suivi d’état par socket (lecture/écriture, timeouts, buffers).
- Request parser : lecture incrémentale, validation syntaxique, tolérance aux entrées imparfaites.
- Router/handlers : résolution serveur/route selon la conf, application des redirections/erreurs.
- CGI manager : fork/exec du script, passage des variables d’environnement.
- Response builder : génération efficace des headers et du corps, envoi segmenté.
Points techniques & apprentissages
- Programmation système : sockets, FD, timeouts, gestion des buffers.
- Robustesse : prévention des fuites de FD, erreurs réseau.
- Conception : séparation claire parsing ↔ routing ↔ exécution pour une meilleure maintenabilité.