webserv
This is when you finally understand why a URL starts with HTTP.
Intro
Fonction principale serveur Web : stocker, traiter et livrer des pages Web aux clients. Communication a l'aide protocole HTTP. Le client (ex : navigateur web) demande une ressource(requete); Le serveur repond par le contenu (souvent fichier reel, contenu sur le stockage du server), ou par un message d'erreur.
Fonctions autorisees
Tout en C++ 98. malloc, free, write, htons, htonl, ntohs, ntohl, select, poll, epoll (epoll_create, epoll_ctl, epoll_wait), kqueue (kqueue, kevent), socket, accept, listen, send, recv, bind, connect, inet_addr, setsockopt, getsockname, fcntl.
Roadmap
- Creer la structure du projet
- server en c++
- envoyer message
- recevoir message
- passer en mode non bloquant
- utiliser poll ou equivalent
- close les clients qui se deconnecte
- alloue notre tableau
- realloue notre tableau si le nombre de client max est atteind
- repondre aux messages des clients
- utiliser les fichiers de conf
- parse content-length
- deconnecter le client si read/recv return 0 OR -1
- Parsing des fichiers de conf
- Prendre chemin en argument
- Chemin par defaut
- Recuperer le port
- Serveur utilise le port du fichier de conf
- Recuperer le host
- Serveur utilise le host du fichier de conf
- Decouper le fichier de configuration dans des objets Conf
- Checker mauvaises infos du fichier de config
- client max body size
- location block
- faire des HTTP redirection 301 + header Location: URL
- possiblity de changer les pages d'error
- autoindex on/off
- allowed_method
- devrait pas fonctionner si plusieurs fois le meme port utilise
- Setup the server_names or not.
- parsing des requetes clients
- analyse messages requetes
- create d'objet Request
- tronquer le body a max_client_body_size
- creation des reponses du serveur
- header
- body => aller chercher le fichier correspondant
- envoyer au client
- DELETE
- adapter les status de reponse
- adapter les reponses en fonction de la Conf
- default error page
- send image
- utiliser autoindex
- 301 request if file is folder to folder/
- upload fichier
- handle client_max_body_size
- handle content-length
- upload.php script
- download fichier
- CGI
- C'est quoi ?
- Faire requete GET dans le terminal
- Faire requete POST dans le terminal
- Faire fonctionner GET dans webserv
- Faire fonctionner POST dans webserv
- Faire fonctionner CGI dynamiquement dans webserv
- POST body
- POST Header (Content-type est duplique, a parser dans le body retourne par php-cgi ?)
- GET body
- GET Header
- gestion d'erreur dans launchCGI
- unchunck request
- clean
- deplacer dans utils
- decouper les fonctions
- proteger les fichiers elementaires
- default site to demonstrate
- default conf to demonstrate
- Une requête à votre serveur ne devrait jamais se bloquer indéfiniment.
- Exécuter CGI en fonction de certaines extensions de fichier (par exemple .php).
- Rendre la route capable d’accepter les fichiers téléchargés et configurer où cela doit être enregistré.
- Error messages
- add const and references
- assignation operators
- Leaks
- error when reloading page after uploaded file
- send buffer
- change pipe to tmp file
- put read/write in poll loop
- remove tmpfile
Doc
CGI
https://www.tutorialspoint.com/cplusplus/cpp_web_programming.htm http://www.wijata.com/cgi/cgispec.html https://www.ibm.com/docs/ko/netcoolomnibus/8.1?topic=scripts-environment-variables-in-cgi-script http://www.cgi101.com/book/ch3/text.html https://fr.wikipedia.org/wiki/Variables_d%27environnement_CGI