Projet de réseau 2011-2012 L3 automne

Le projet sera fait en binôme et rendu par mail avant le 15/12/2011 à minuit (soit 1 minute après le 14 décembre 23h59) pour être présenté en TP le jour même. Un petit rapport expliquant votre approche vous sera demandé.

Réalisation d'un serveur Web

Le but est de réaliser un mini serveur Web. Pour cela vous allez implémenter une partie du protocole HTTP de la RFC2616. Dans cette version allégée, nous allons implémenter que l'instruction GET.

Le serveur web prendra en argument un répertoire et le considèrera comme racine.

Exemple si le répertoire est ”~/serveur” et que la page demandée est ”/toto/fo.html” le serveur donnera le fichier ”~/serveur/toto/fo.html”.

Si la page demandée est un répertoire il donnera le fichier “index.html” contenu dans celui-ci.

Votre serveur Web devra envoyer les bons codes de retour et le bon type mime du fichier.

Vous pouvez utiliser ou fork ou select. Mais pour fork, éliminer correctement les zombies (ie: sigchld).

Votre serveur devra aussi implémenter le fonction “keep-alive”.

Réalisation d'un client Web

Le but ici est de réaliser un Wget allégé que nous allons appeler lwget. Ce client devra juste récupérer la donnée, dont l'URI est fourni en argument.
Attention il devra suivre les redirections (code 3XX).

Bonus

Si vous avez du temps. Voici quelques idées pour améliorer votre projet.

  • Un répertoire “private” demande une authentification “basic” pour lire le contenu. Les identifiants peuvent être stockés dans un fichier du répertoire.
  • Appeler des programmes (méthode cgi) pour certains types de fichiers.
  • Implémenter d'autres commandes du protocole HTTP.