![Page 1: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/1.jpg)
Cours de C – Séance d’exercices
19 Octobre 2007
![Page 2: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/2.jpg)
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
![Page 3: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/3.jpg)
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.
![Page 4: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/4.jpg)
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
![Page 5: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/5.jpg)
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
![Page 6: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/6.jpg)
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
![Page 7: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/7.jpg)
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
![Page 8: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/8.jpg)
Etape 3
• Coder la fonction prepare_get_response– Lire le fichier– Remplir le buffer de la structure– Remplir la longueur– Remplir le Content-Type
![Page 9: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/9.jpg)
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
![Page 10: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/10.jpg)
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 !
![Page 11: Cours de C – Séance dexercices 19 Octobre 2007. Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur](https://reader036.vdocuments.fr/reader036/viewer/2022082918/551d9d7e497959293b8b69c9/html5/thumbnails/11.jpg)
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