cours de c – séance dexercices 19 octobre 2007. objectif ecrire un serveur http sans gérer la...
TRANSCRIPT
Cours de C – Séance d’exercices
19 Octobre 2007
Objectif
• Ecrire un serveur HTTP• Sans gérer la partie réseau, on utilisera un
utilitaire pour cela• Serveur gérant une seule requête
Protocole: client
• Protocole :– Requête client :• GET /test.html HTTP/1.1\r\n• Host: nom_de_l_hote\r\n• Parameter: Value\r\n• …..• \r\n
• Nécéssité de traiter les \r\n et les \n\n aussi.
Protocole: Serveur
• Protocole– Réponse serveur• HTTP/1.0 200 OK\r\n
– ( ou 404 Not Found, ou 500 Internal Error )
• Content-Type: text/html\r\n– (ou image/jpeg, image/png, image/gif … )
• Content-Length: 1242\r\n• Connection: Close• \r\n• DATA
Etape 0
• A l’aide de main_http.c et Struct_http.h créer le projet
• Rajouter à la main les fonctions manquantes (vides)
• Le faire compiler
Etape 1
• Utiliser la structure définie danshttp://people.via.ecp.fr/~henri/SA2008/....
Struct_http.h• Implémentation de la fonction read_request– Lire stdin jusqu’à la première ligne vide– Prévoir le cas où ‘\r’ est converti en ‘\n’– Identifier le type de requête, et éventuellement
appeler prepare_get_request
Etape 2
• Implémentation de la fonction process_get_request– Trouver dans la première ligne le nom du fichier
demandé (utiliser strchr)– Remplir la structure dont le pointeur est passé en
argument
Etape 3
• Coder la fonction prepare_get_response– Lire le fichier– Remplir le buffer de la structure– Remplir la longueur– Remplir le Content-Type
Etape 4
• Coder la fonction post_response– Afficher dans l’ordre les métadonnées contenues
dans la structure– \r\n– Afficher le contenu du buffer de réponse
• Cette fonction doit gérer les codes d’erreur RESPONSE_ERROR et RESPONSE_NOT_FOUND
Les astuces
• Le fichier : l’ouvrir en lecture avec le more « rb », le « b » est TRES important
• Ajouter le mode binaire : _setmode(fileno(stdout), _O_BINARY);• Penser que l’utilitaire convertit les \r en \n !
On branche
• Utiliser le programme « netcat_modified »• Le lancer avec l’argument
« -L 8000 –e <votre_programme.exe> »• Pointer le navigateur vers
http://localhost:8000/test.html