← Retour

webserv - Serveur HTTP/1.1 en C++98

Implémentation d'un serveur web HTTP/1.1 compliant en C++98, sans aucune bibliothèque externe. Gestion des connexions non-bloquantes, parsing de fichiers de configuration, support CGI, gestion de multiples serveurs virtuels, etc.

  • C++
  • Network
  • Socket Programming

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é.