This shows you the differences between two versions of the page.
sde2:teme:tema_fr_4_rust [2022/05/11 16:00] alexandru.radovici |
sde2:teme:tema_fr_4_rust [2022/05/23 13:36] (current) alexandru.radovici |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Devoir 4 - Serveur web ====== | + | ====== Devoir 4 - Rustywebserver ====== |
Le but de ce devoir est de créer un serveur Web qui doit servir des fichiers et exécuter des scripts. | Le but de ce devoir est de créer un serveur Web qui doit servir des fichiers et exécuter des scripts. | ||
Line 32: | Line 32: | ||
- | Si vous avez des questions concernant le devoir, posez-les en publiant un //issue// sur le github [[https://github.com/UPB-FILS-SdE2/questions]] avec le format // [busybox] <le titre de votre question> //. Vous aurez besoin d'un compte github pour publier des questions. | + | Si vous avez des questions concernant le devoir, posez-les en publiant un //issue// sur le github [[https://github.com/UPB-FILS-SdE2/questions]] avec le format // [webserver] <le titre de votre question> //. Vous aurez besoin d'un compte github pour publier des questions. |
<note warning> | <note warning> | ||
Line 45: | Line 45: | ||
<code bash> | <code bash> | ||
- | rustwebserver ROOT_FOLDER | + | rustwebserver PORT ROOT_FOLDER |
</code> | </code> | ||
Line 144: | Line 144: | ||
Le résultat de l'exécution correspond à ce que le script a écrit à l'écran (indice : utilisez un pipe) | Le résultat de l'exécution correspond à ce que le script a écrit à l'écran (indice : utilisez un pipe) | ||
</note> | </note> | ||
+ | |||
+ | ==== Variables ==== | ||
+ | |||
+ | Lorsque le script est exécuté, tous les en-têtes HTTP reçus du client sont envoyés en tant que variables d'environnement au script (astuce : utilisez execve). | ||
+ | |||
+ | Le script recevra deux variables d'environnement supplémentaires : Method et Path. Method a la valeur GET ou POST et Path a la valeur du chemin demandé. | ||
+ | |||
+ | ==== Query String ==== | ||
+ | |||
+ | Le moment de lire sur la définition de la [[https://en.wikipedia.org/wiki/Query_string|query string]]. | ||
+ | |||
+ | Chaque variable de query string doit être envoyée au script en tant que variable d'environnement au format Query_title=value. | ||
==== Demande HTTP ==== | ==== Demande HTTP ==== | ||
Line 186: | Line 198: | ||
</note> | </note> | ||
+ | ===== Log ===== | ||
+ | Au démarrage, le serveur imprimera ce qui suit: | ||
+ | <code> | ||
+ | Root folder: <ansolute path to root folder> | ||
+ | Server listening on 0.0.0.0:PORT | ||
+ | </code> | ||
+ | |||
+ | Pour chaque requête, le serveur imprimera une ligne: | ||
+ | <code> | ||
+ | $Request request_source_ip_address $Path -> status_code (status_text) | ||
+ | </code> | ||
+ | |||
+ | ===== Bonus ===== | ||
+ | |||
+ | Mettre en œuvre la liste des dossiers pour le serveur Web. Si le chemin demandé est un dossier, générez une réponse html au format suivant. | ||
+ | |||
+ | <code html> | ||
+ | <html> | ||
+ | <h1>$Request</h1> | ||
+ | <ul> | ||
+ | <li><a href="/..">..</a></li> | ||
+ | <li><a href="/file1">file1</a></li> | ||
+ | <li><a href="/file2">file2</a></li> | ||
+ | ... | ||
+ | </ul> | ||
+ | </html> | ||
+ | </code> |