Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mvpee/42-webserv
A non-blocking HTTP/1.1 server written in C++, designed to handle multiple simultaneous connections efficiently using asynchronous I/O.
https://github.com/mvpee/42-webserv
19 42 accept bind cpp http request response socket webserv
Last synced: 17 days ago
JSON representation
A non-blocking HTTP/1.1 server written in C++, designed to handle multiple simultaneous connections efficiently using asynchronous I/O.
- Host: GitHub
- URL: https://github.com/mvpee/42-webserv
- Owner: MVPee
- Created: 2024-08-26T12:49:23.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-10-24T19:01:50.000Z (about 2 months ago)
- Last Synced: 2024-10-26T05:14:48.934Z (about 2 months ago)
- Topics: 19, 42, accept, bind, cpp, http, request, response, socket, webserv
- Language: C++
- Homepage:
- Size: 2.4 MB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
๐ 42-Webserv
About
ยท
Running
ยท
Configuration
ยท
Key features# ๐ก About the project
>This is when you finally understand why a URL starts
with HTTP.This project is about writing a non-blocking HTTP/1.1 server in C++, designed to handle multiple simultaneous connections efficiently using asynchronous I/O. The server adheres to the HTTP/1.1 protocol and supports essential features such as GET, POST, DELETE, and error handling, ensuring responsive communication without stalling the main execution thread. Additionally, the server integrates non-blocking CGI execution, supporting various languages such as Python, Perl, PHP, and binary executables. Multi threading implementation, each server instance runs on its own thread.
![gallery](./.imgs/gallery.png)
## ๐ Running the server
```bash
make run
```
It will automatically compile the project and run it.
```bash
./webserv [configuration file]
```
Will launch the previously compiled project with `make` and run it. (configuration file must be a valid `.conf` file see section below)![Servers](./.imgs/Servers.png)
## ๐ป Configurating the server
It will allow you to setup the following parameters :
- `name` -- define the server name
- `listen`:`port` -- to configure on which port the server will be listening (only one `listen` per `server` block)
- `methods` -- to set the authorized HTTP request (`GET` | `POST` | `DELETE`)
- `location` -- to set parameters for a specific route
- `index` -- to serve a default file if none match the requested URI
- `root` -- to route the requested URI to another directory
- `upload` -- to set a specific directory for upload requests
- `listing` -- to list all files present in the targeted directory (`ON` | `OFF`)
- `error` -- to define the page to display when an error occurs, add a default page if none is provided in the `.conf` file.
- `cgi` -- to configure a cgi to execute for a specific file extenstion (`.php` | `.py` | `.pl`)
- `redirection` -- to define a redirection to a location or to an another server
```
{
name server
listen 0.0.0.0:8080
methods GET POST
body_size 1000000000000
root ./rsrcs
upload /upload
index index.html
error 404 404.html
location /cookie
root ./rsrcs/cookie
index cookie.html
methods GET
location /cgi
root ./rsrcs/cgi
listing ON
cgi .py .php
methods GET POST
location /intra
root ./rsrcs/intra
index intra.html
methods GET
location /listing
listing ON
error 403 403.html
error 404 404.html
root ./rsrcs/listing
methods GET
location /listing/403.html
root ./rsrcs/listing/403.html
location /listing/404.html
root ./rsrcs/listing/404.html
location /listing/1/2/3
redirection /listing
location /upload
root ./rsrcs/upload
methods GET DELETE
location /redirection
redirection https://fr.wikipedia.org/
}
```
------------
## ๐ Key Features- **Configuration Flexibility**
-- Accepts a custom configuration file or defaults to a predefined path- **Non-Blocking Architecture**
-- Uses a single `select()` (or equivalent) per server for all I/O operations, including listening and client communication- **Efficient Resource Management**
-- Handles all read/write operations via `select()`, optimizing resource usage and **preventing blocking**- **HTTP Methods**
-- Supports `GET`, `POST`, and `DELETE`- **File Uploads**
-- Allows clients to upload files directly to the server- **Static File Serving**
-- Serves static websites- **Accurate HTTP Responses**
-- Delivers precise status codes along with a specified error page or a default one- **CGI Integration**
-- Supports CGI execution (e.g., `PHP`, `Python`, `Perl`, ...)- **Multi-Port Listening**
-- Listens on multiple ports as defined in the configuration file- **Browser Compatibility**
-- Compliant with HTTP 1.1 standards.- **Handle Cookies**
-- A small cookie clicker has been made to show the implementation of the cookies- **Keep-alive connection**
-- Connection is kept alive if possible- **Time out**
-- Timeout for CGI and basic requests---
![Cookie-clicker](./.imgs/Cookie-clicker.png)
---
This group project was done by [MVPee (mvan-pee)](https://github.com/MVPee) and [Dan (dspilleb)](https://github.com/dspilleb)