diff --git a/src/http/README.md b/src/http/README.md new file mode 100644 index 0000000..08fd270 --- /dev/null +++ b/src/http/README.md @@ -0,0 +1,73 @@ +# HTTP Layer — Guide d'intégration + +## Utilisation (4 lignes) + +```cpp +#include "http/RequestParser.hpp" +#include "http/Router.hpp" +#include "http/MethodHandler.hpp" +#include "http/ResponseBuilder.hpp" + +RequestParser parser; +HttpRequest req = parser.parse(rawString); // rawString = bytes du socket + +if (req.method.empty()) + // requête invalide → envoyer 400 + +Router router; +LocationConfig loc = router.route(req, serverConfig); + +MethodHandler handler; +HttpResponse res = handler.handle(req, loc, serverConfig); + +ResponseBuilder builder; +std::string raw = builder.build(res); + +send(fd, raw.c_str(), raw.size(), 0); +``` + +> **Important** : accumuler les données du socket jusqu'à trouver `\r\n\r\n` avant d'appeler `parse()`. +> Le calcul de la taille du body (`Content-Length`) et la gestion des bytes incomplets sont à gérer côté core server — le parser suppose que la requête complète est déjà dans le buffer. +> Si `req.method` est vide après `parse()`, c'est au core server de retourner 400 au client — le HTTP layer ne throw pas d'exception. +> +> ```cpp +> if (req.method.empty()) +> { +> HttpResponse err; +> err.status_code = 400; +> err.status_msg = "Bad Request"; +> err.body = "