Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde:teme:tema_5_python [2020/05/04 20:39]
ioana_maria.culic [Informations générales]
— (current)
Line 1: Line 1:
-====== Devoir 5 - Serveur web ====== 
- 
-Le but de ce devoir est de créer un serveur Web qui doit servir des fichiers et exécuter des scripts. 
- 
-<​note>​ 
-Ce devoir sera résolu dans l'​environnement de programmation Node.js, en utilisant JavaScript comme langage de programmation. 
-</​note>​ 
- 
- 
-====== Informations générales ====== 
- 
-<note important>​ 
-Deadline: ​  **22 Mai, 23:55**\\ 
-Score: **2 points** de la note finale \\ 
-Téléchargement:​ https://​vmchecker.cs.pub.ro/​ \\ 
-Téléchargement en retard: **0.1point/​jour** (maximum 4 jours) 
-</​note>​ 
- 
-====== Connaissances évaluées ====== 
- 
-   * Utilisation des opérations asynchrones 
-   * Compréhension du paradigme client-servur 
-   * Compréhension du protocole HTTP 
- 
- 
-====== Regles ====== 
- 
-   - Le devoir doit contenir un fichier Readme ou vous allez expliquer votre solution (-0.1p) 
-   - Vous pouvez utiliser seulement le langage JavaScript (Node.js) 
-   - Un devoir qui passe tous les les tests obtiendra 10 points de 10 (seulement si vous n'​utilisez pas un API interdit; danc ce cas, il ne sera pas noté) 
-   - Un devoir qui est implémenté seulement pour passer les tests ne sera pas noté pour ces tests-la 
- 
- 
-===== Tricher ====== 
- 
-Le devoir sera résolu individuellement. Si vous essayez de tricher, vous obtiendrez **0p** pour le devoir. On va utiliser des systemes automatisés pour détecter si vous avez copié. Si on a des doutes, on va vous adresser des questions supplémentaires concernant le devoir. 
- 
-====== Questions ====== 
- 
-Si vous avez des questions liées au devoir, on vous prie d'​ouvrir un issue sur le [[https://​github.com/​upb-fils/​sde.git|repository]] de github, ayant le titre avec le format suivant: // [server] <titre de la question>​ //. Vous avez besoin d'un compte de github pour poser des questions. 
- 
-<note warning> 
-**NE PUBLIEZ PAS LE CODE SOURCE.** Cette action sera considérée comme tentative de tricher et sera pénalisée avec 0p pour le devoir. 
-</​note>​ 
- 
-====== Server ====== 
- 
-Le serveur sera implémenté dans le fichier ''​index.js''​ et il sera exécuté de la maniere suivante: 
- 
-<code bash> 
-node index.js 
-</​code>​ 
- 
-Pour résoudre le devoir, vous allez implémenter un serveur HTTP, qui peut traiter les demandes via des opérations asynchrones. Le serveur recevra des paquets HTTP des clients, effectuera diverses opérations et répondra avec des paquets HTTP (un format simplifié). 
- 
-===== Configuration du serveur ===== 
- 
-Au démarrage, le serveur lira un fichier de configuration,​ situé dans le même répertoire que ''​index.js''​. Le nom du fichier est ''​config.json''​ et contiendra la structure JSON suivante: 
- 
-<code bash> 
-{ 
-    "​scripts"​ : "​scripts_path",​ 
-    "​www"​ : "​root_path"​ 
-} 
-</​code>​ 
- 
-''​scripts_path''​ est un chemin supprimé vers un répertoire contenant les scripts à exécuter par le serveur. 
- 
-''​root_path''​ est un chemin absolu vers le répertoire racine, par rapport auquel toutes les requêtes seront effectuées. Par exemple, si une demande a le chemin ''/​images/​sunny.png''​ et que le chemin racine est ''/​home/​server/​root'',​ le fichier avec le chemin absolu ''/​home/​server/​root/​images/​sunny.png''​ sera retourné. 
- 
-===== Messages HTTP ===== 
- 
-Les messages HTTP reçus par le serveur auront le format générique suivant: 
- 
-<code bash> 
-<​request_type>​ <​path>​ HTTP/1.1 
-<​header_key>:<​header_value>​ 
-... 
-<​header_key>:<​header_value>​ 
-  
-<message - optional>​ 
-</​code>​ 
- 
-Les messages HTTP envoyés par le serveur auront le format générique suivant: 
- 
-<code bash> 
-HTTP/1.0 <​status_code status> ​ 
-<​header_key>:<​header_value>​ 
-... 
-Connection: close 
-  
-<​message>​ 
-</​code>​ 
- 
-Les variables suivantes seront remplacées comme suit: 
- 
-   * request_type - le type de demande (GET ou POST); 
-   * path- le chemin vers le fichier demandé (ex: / scripts / update); 
-   * header_key: header_value - paires de clés de valeur qui font partie de l'​en-tête (ex: type de contenu: application / json); 
-   * message - le corps du message (pour la demande, le corps du message n'​existe que si la demande est de type POST); 
-   * status_code status - le code d'​état suivi de la description de l'​état;​ nous définirons les valeurs possibles ci-dessous (par exemple 404 Not found). 
- 
-===== Retour des fichiers ===== 
- 
-La première fonctionnalité du serveur est de renvoyer les fichiers demandés par les clients. Dans ce cas, le serveur recevra une demande GET vers un fichier et répondra avec le contenu du fichier. 
- 
-<​note>​ 
-Le serveur retournera seulement des fichiers qui se trouvent en ''​root_path''​. 
-</​note>​ 
- 
-==== Demande HTTP ==== 
- 
-Dans ce cas, la demande recue par le serveur aura le format suivant: 
- 
-<code bash> 
-GET <​file_path_relative_to_root>​ HTTP/1.1 
-Host: localhost:​8000 
-<other header lines> 
-</​code>​ 
- 
-La première ligne de l'​application spécifie le chemin d'​accès au fichier demandé. L'​en-tête peut contenir d'​autres lignes en plus de celles spécifiées ci-dessus. 
- 
-==== Réponse HTTP ==== 
- 
-Pour répondre aux demandes de fichiers, le serveur renverra un message similaire a: 
- 
-<code bash> 
-HTTP/1.1 <​status_code status> 
-Content-type:​ <​file_type>​ 
-Connection: close 
-  
-<​file_contents>​ 
-</​code>​ 
- 
-Selon la demande reçue et l'​état du fichier demandé, l'​état de la réponse peut être: 
- 
-   * 200 OK - le fichier a été retourné; 
-   * 403 Forbidden - le serveur n'est pas autorisé à lire le fichier; 
-   * 404 Not Found - le fichier n'​existe pas. 
- 
-La troisième ligne de l'​application spécifie le type de fichier renvoyé. Selon le type de fichier, ''​file_type''​ peut avoir les valeurs suivantes: 
- 
-   * text / plain; charset = utf-8 - pour les fichiers texte (extension .txt); 
-   * text / html; charset = utf-8 - pour les fichiers html; 
-   * image / jpeg - pour les fichiers JPEG; 
-   * image / png - pour les fichiers PNG; 
-   * application / zip - pour les archives ZIP. 
-   * application / octet-stream - pour les fichiers avec ou sans autres extensions 
- 
- 
-===== Exécution d'un script ===== 
- 
-Certains des messages reçus des clients nécessiteront l'​exécution de scripts. Ce type de demande est identifié par le chemin du fichier, et dans ce cas le chemin est un fichier du répertoire ''​scripts_path''​. 
- 
-Tous les fichiers exécutables peuvent exister dans le répertoire ''​scripts_path''​. N'​importe lequel de ces fichiers sera exécuté avec la commande ''​./​script_name''​. Après l'​exécution,​ le serveur répondra avec le résultat de l'​exécution. 
- 
-==== Demande HTTP ==== 
- 
-Dans ce cas, la demande recue par le serveur ressemblera a: 
- 
-<code bash> 
-<​request_type>​ <​file_path_relative_to_root>​ HTTP/1.1 
-Host: localhost:​8000 
-<other header lines> 
-  
-<message - optional>​ 
-</​code>​ 
- 
-Dans ce cas, les requêtes (''​request_type''​) peuvent être de deux types: ''​GET''​ et ''​POST''​. 
- 
-Pour ces demandes, les lignes de l'​en-tête,​ à l'​exception des deux premières, sont transmises en tant que variables d'​environnement pour le fichier à exécuter. 
- 
-Si la demande est POST, il y aura également un corps de message. Ceci est transmis en entrée au script à exécuter. 
- 
-==== Réponse HTTP ==== 
- 
-Dans ce cas, le serveur renverra un message sous la forme: 
- 
-<code bash> 
-HTTP/1.1 <​status_code status> 
-Connection: close 
-<​other_headers>​ 
-  
-<​file_contents>​ 
-</​code>​ 
- 
-Certains exécutables renverront le corps du message avec l'​en-tête,​ tandis que d'​autres ne renverront que le corps du message. Si l'​exécutable renvoie également l'​en-tête,​ il contiendra toutes les informations nécessaires,​ à l'​exception des deux premières lignes du message. Si l'​exécutable ne renvoie aucun en-tête, en plus des deux premières lignes, le serveur générera également l'​en-tête ''​Content-type:​ application/​octet-stream''​. 
- 
-<​note>​ 
-L'​en-tête renvoyé par un exécutable peut être identifié comme la première séquence de lignes jusqu'​à ce qu'une ligne vierge apparaisse. 
-</​note>​ 
- 
-Le statut dans la réponse aura l'une des valeurs suivantes: 
- 
-   * 200 OK - le traitement a été effectué avec succès et le résultat peut être trouvé dans le corps du message; 
-   * 403 Forbidden - le serveur n'est pas autorisé à lire ou exécuter le fichier; 
-   * 404 Not Found - l'​exécutable requis n'​existe pas; 
-   * 500 Internal Server Error - l'​exécutable demandé n'a pas été exécuté avec succès; Dans ce cas, le texte du stderr sera ajouté au corps du message. 
- 
-<​note>​ 
-Le serveur doit s'​assurer que les fichiers d'un répertoire autre que celui mentionné dans le fichier de configuration ne peuvent pas être exécutés. 
-</​note>​ 
- 
-===== Operations asynchrones ===== 
- 
-Le devoir sera implémenté dans l'​environnement de programmation [[https://​nodejs.org/​en/​|Node.js]] et vous utiliserez des fonctions asynchrones pour traiter les demandes reçues des clients. 
- 
-Seules les bibliothèques Node.js natives sont autorisées à résoudre le problème, et les modules suivants sont recommandés:​ 
- 
-   * [[https://​nodejs.org/​api/​net.html|net]] pour accepter les connexions et recevoir / envoyer des messages HTTP; 
-   * [[https://​nodejs.org/​api/​child_process.html|child_process]] pour lancer des processus enfants. 
- 
-<node warning> 
-Dans l'​implémentation du thème, vous ne pouvez utiliser que des bibliothèques Node.js natives et uniquement des fonctions asynchrones. 
-</​note>​ 
- 
-====== Envoi tu devoir ====== 
- 
-Le thème se chargera sur vmchecker. Connectez-vous au site avec l'​utilisateur moodle, sélectionnez le cours Systemes d'​Explotation (FILS) et téléchargez l'​archive thématique. 
- 
-===== Readme ===== 
- 
-Le fichier readme aura la forme suivante: 
- 
-<code bash> 
-Nom entier 
-Groupe 
- 
-Description de la solution 
-</​code>​ 
- 
-===== Archiver le devoir ===== 
- 
-Pour télécharger le thème, suivez les étapes: 
- 
-   - Créez une archive zip (pas rar, ace, 7zip ou autre format) qui contient: 
-        * tous les fichiers JavaScript (* .js) 
-        * Fichier Readme 
-   - Connectez-vous à vmchecker 
-   - Sélectionnez le cours Systems d'​Explotation (FILS) 
-   - sélectionnez 5. Serveur 
-   - Téléchargez l'​archive 
- 
- 
-<​note>​ 
-L'​archive doit contenir tous les fichiers (principaux) à la racine, pas dans les sous-répertoires. NE PAS archiver le répertoire du thème, archiver les fichiers DIRECTEMENT. 
-</​note>​ 
- 
-Après avoir téléchargé l'​archive,​ vmchecker exécutera: 
- 
-<code bash> 
-unzip archive.zip homework 
-cd homework 
-make -f Makefile.check 
-</​code>​ 
  
sde/teme/tema_5_python.1588613959.txt.gz · Last modified: 2020/05/04 20:39 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0