-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathREADME.md.bak
More file actions
156 lines (88 loc) · 5.35 KB
/
Copy pathREADME.md.bak
File metadata and controls
156 lines (88 loc) · 5.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
🚀 1. Aperçu du Projet
Webserv est l'implémentation personnalisée d'un serveur HTTP/1.1 rudimentaire. Ce projet a pour objectif de comprendre et de maîtriser les concepts fondamentaux de la communication réseau, du protocole HTTP, et de l'architecture de serveur.
Ce serveur est capable de traiter les requêtes HTTP, de servir des fichiers statiques, d'exécuter des scripts CGI, et de gérer des configurations complexes via un fichier dédié.
🔑 Fonctionnalités Principales
Gestion des connexions : Utilisation d'epoll pour gérer plusieurs connexions simultanément (Non-blocking I/O).
Protocole HTTP/1.1 : Support des méthodes GET, POST, et DELETE.
Fichier de Configuration : Le comportement du serveur est défini par un fichier de configuration inspiré de Nginx (gestion de plusieurs serveurs/ports, server_name, error_page, etc.).
Pages d'Erreur Personnalisées : Gestion des codes de statut HTTP (e.g., 404, 403, 500) avec des pages d'erreur définies par l'utilisateur.
Autoindex : Affichage d'un répertoire si aucun index n'est spécifié.
Upload de Fichiers : Gestion de l'upload via la méthode POST.
CGI (Common Gateway Interface) : Exécution de scripts externes (e.g., Python, Perl) pour générer du contenu dynamique.
🛠️ 2. Compilation et Exécution
⚙️ Compilation
Clonez le dépôt et utilisez le Makefile fourni :
Bash
git clone git@vogsphere.42.fr:vogsphere/intra-uuid-[votre_uuid] webserv
cd webserv
make
Le binaire exécutable généré se nomme généralement webserv.
📄 Fichier de Configuration
Le serveur nécessite un fichier de configuration en argument. Un exemple est inclus sous conf/default.conf (ou similaire).
Pour lancer le serveur :
Bash
./webserv [chemin/vers/votre/config.conf]
Si aucun chemin n'est fourni, il devrait tenter de charger un fichier par défaut (e.g., ./webserv default.conf).
✨ 3. Bonus Implémentés
Les fonctionnalités suivantes, allant au-delà des exigences minimales du sujet, ont été implémentées :
✅ Gestion des sessions (Cookies) : Le serveur peut lire et définir des cookies HTTP.
✅ Authentification Basique (Basic Auth) : Protection de répertoires spécifiques par identifiant et mot de passe (via l'en-tête Authorization).
✅ Gestion des transferts en chunked (Transfer-Encoding: chunked).
✅ Redirections 301/302 : Possibilité de configurer des redirections HTTP permanentes ou temporaires.
✅ Implémentation de kqueue (macOS) / epoll (Linux) : Choix dynamique du meilleur multiplexeur I/O disponible.
🔍 4. Section Correction
Cette section fournit des commandes curl et des exemples pour valider les différentes fonctionnalités du serveur. Assurez-vous que le serveur tourne et que votre configuration (e.g., default.conf) est adaptée.
(Pré-requis : Le serveur écoute sur localhost:8080.)
1. Test des Pages Statiques (GET)
Testez la page d'accueil :
Bash
curl -i http://localhost:8080/
Testez une page spécifique :
Bash
curl -i http://localhost:8080/index.html
2. Test des Erreurs et Autoindex
Testez une ressource inexistante (devrait retourner 404) :
Bash
curl -i http://localhost:8080/page_qui_n_existe_pas
Testez un répertoire avec autoindex activé (devrait afficher une liste de fichiers) :
Bash
curl -i http://localhost:8080/path/to/directory_with_autoindex/
3. Test d'Upload de Fichiers (POST)
Uploadez un fichier data.txt dans le répertoire d'upload configuré (ex: /uploads) :
Bash
echo "Ceci est un test d'upload." > data.txt
curl -i -X POST -F 'file=@data.txt' http://localhost:8080/upload_path/
Vérification : Le fichier data.txt doit apparaître dans le répertoire cible sur le serveur.
4. Test CGI
Exécutez un script CGI (ex: un script Python qui affiche l'heure) :
Bash
curl -i http://localhost:8080/cgi-bin/time.py
Attendu : Une réponse HTTP avec le résultat du script (ex: l'heure actuelle) dans le corps.
5. Test de Suppression (DELETE)
Supprimez un fichier existant (assurez-vous d'avoir les permissions) :
Bash
# Uploadez d'abord un fichier pour le test
echo "Fichier à supprimer." > test_delete.txt
curl -i -X POST -F 'file=@test_delete.txt' http://localhost:8080/upload_path/
# Puis supprimez-le
curl -i -X DELETE http://localhost:8080/upload_path/test_delete.txt
Attendu : Un code de statut 204 No Content ou 200 OK si la suppression a réussi.
6. Test d'Authentification (Bonus)
Accès à un répertoire protégé (/protected/) :
Bash
# Accès non autorisé (devrait retourner 401 Unauthorized)
curl -i http://localhost:8080/protected/
# Accès autorisé (avec identifiants user:password)
curl -i -H "Authorization: Basic dXNlcjpwYXNzd29yZA==" http://localhost:8080/protected/
# Note: "dXNlcjpwYXNzd29yZA==" est la base64 de "user:password"
📚 5. Documentation du Code
Le code source est organisé de la manière suivante :
src/ : Contient le code source C++.
Server/ : Classes gérant le socket et l'écoute.
Request/ & Response/ : Parsing de la requête HTTP et construction de la réponse.
Config/ : Classes pour le parsing et la validation du fichier de configuration.
CGI/ : Gestion de l'exécution des scripts CGI.
Utils/ : Fonctions utilitaires diverses (string manipulation, I/O, etc.).
include/ : Fichiers d'en-tête (.hpp).
conf/ : Exemples de fichiers de configuration.
html/ : Fichiers statiques et pages d'erreur par défaut.