{"id":15047189,"url":"https://github.com/kuninoto/42_webserv","last_synced_at":"2026-04-06T06:32:34.505Z","repository":{"id":167320923,"uuid":"625216620","full_name":"Kuninoto/42_webserv","owner":"Kuninoto","description":"A Web Server written from scratch in C++","archived":false,"fork":false,"pushed_at":"2023-06-04T14:57:24.000Z","size":19417,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T15:30:52.438Z","etag":null,"topics":["1337","1337school","42","42-webserver","42born2code","42cursus","42ecole","42porto","42portugal","42projects","42school","42webserv","cpp","cpp98","cpp98-compatible","http","linux","poll","school42","webserver"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kuninoto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-08T12:27:57.000Z","updated_at":"2025-01-18T14:34:58.000Z","dependencies_parsed_at":"2024-10-12T16:01:23.332Z","dependency_job_id":"a266ad51-377a-47bb-9694-37b59296a552","html_url":"https://github.com/Kuninoto/42_webserv","commit_stats":null,"previous_names":["kuninoto/42_webserv"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuninoto%2F42_webserv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuninoto%2F42_webserv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuninoto%2F42_webserv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuninoto%2F42_webserv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kuninoto","download_url":"https://codeload.github.com/Kuninoto/42_webserv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243473598,"owners_count":20296581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1337","1337school","42","42-webserver","42born2code","42cursus","42ecole","42porto","42portugal","42projects","42school","42webserv","cpp","cpp98","cpp98-compatible","http","linux","poll","school42","webserver"],"created_at":"2024-09-24T20:55:08.721Z","updated_at":"2025-12-30T07:09:55.814Z","avatar_url":"https://github.com/Kuninoto.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# webserv (42Porto - 42Cursus)  \n\nProject done in collaboration with:  \n[Rodrigo Ramos](https://github.com/ramos21rodrigo)  \n[João Arsénio](https://github.com/RealMadnessWorld)  \n\n### Grade: 100/100\n\n### Demonstration  \n![](./extras/logs_showcase.png)\n\n### Description  \n42_Webserv is a web server written from scratch in C++ (C++98), capable of handling multiple clients simultaneously.  \n\n\u003e Disclaimer: Only tested with Firefox\n\n### Features  \n- NGINX-like configuration file  \n- Handling of the **GET**, **POST** and **DELETE** HTTP request methods  \n- File upload  \n- Python CGI support   \n\n### Installing and running the project  \n1- Installing webserv dependencies:  \n\n\tsudo apt-get install c++ make  \n2- Clone this repository:  \n\n\tgit clone https://github.com/Kuninoto/42_webserv webserv\n3- Navigate to the project's folder, compile and wipe the artefact object files:\n\n\tcd webserv \u0026\u0026 make \u0026\u0026 make clean\n3- Run webserv\n\n\t./webserv \u003cconfig_file\u003e\n\tor\n\t./webserv\n\twhich is the same as:\n\t./webserv config/default.conf\n\n4- Open Firefox and search for localhost:8080\n\n#### Makefile available targets  \n`make` or `make all` - compiles `webserv`  \n`make clean` - wipes all object files  \n`make fclean` - deletes webserv and all object files  \n`make re` - `fclean`  + `all`  \n\n### Useful links\n\n**What is HTTP?**  \n[Definition](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)  \n[HTTP Crash Course \u0026 Exploration](https://www.youtube.com/watch?v=iYM2zFP3Zn0)   \n\n**Understanding HTTP**  \nHTTP Request Methods:  \n[Overview](https://www.youtube.com/watch?v=tkfVQK6UxDI)  \n[GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET#syntax)  \n[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)  \n[DELETE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE)  \n\n[HTTP Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP)  \n[HTTP Header Fields](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields)  \n\n**What is a Web Server?**  \n[Definition](https://en.wikipedia.org/wiki/Web_server)  \n[Concepts and Examples](https://www.youtube.com/watch?v=9J1nJOivdyw)  \n[How to build a simple HTTP server from scratch](https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa)  \n\n**Sockets**  \n[Definition](https://en.wikipedia.org/wiki/Network_socket)  \n[What exactly is a Socket?](https://stackoverflow.com/questions/16233193/what-exactly-is-socket)\n\n**I/O Multiplexing**  \n[Socket programming with select(), poll() and epoll() in Linux](https://www.youtube.com/watch?v=dEHZb9JsmOU\u0026t=1035s)\n[poll() man page](https://linux.die.net/man/2/poll)  \n\n**NGINX**  \n[Definition](https://en.wikipedia.org/wiki/Nginx)  \n[Understanding NGINX configuration file](https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts)  \n\n**CGI**  \n[Common Gateway Interface (CGI)](https://en.wikipedia.org/wiki/Common_Gateway_Interface)  \n[Python CGI Programming](https://www.youtube.com/watch?v=hV1NWnbC-D8)  \n\n**General**  \n[Blocking vs. Non-blocking I/O](https://www.linuxtoday.com/blog/blocking-and-non-blocking-i-0/)  \n[URL vs. URI](https://stackoverflow.com/questions/4239941/difference-between-url-and-uri)  \n\n---\nMade by Nuno Carvalho (Kuninoto) | nnuno-ca@student.42porto.com  \n\u003cdiv id=\"badge\"\u003e \u003ca href=\"https://www.linkedin.com/in/nuno-carvalho-218822247\"/\u003e \u003cimg src=\"https://img.shields.io/badge/LinkedIn-blue?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" alt=\"LinkedIn Badge\"/\u003e\u0026nbsp;\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuninoto%2F42_webserv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkuninoto%2F42_webserv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuninoto%2F42_webserv/lists"}