/webserv

Primary LanguageC++

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