An open API service indexing awesome lists of open source software.

https://github.com/rbourgeat/webserv

This project is here to make you write your HTTP server. You will be able to test it with a real browser. HTTP is one of the most used protocols on the internet. Knowing its arcane will be useful, even if you won’t be working on a website.
https://github.com/rbourgeat/webserv

42 42born2code 42cursus 42paris 42projects 42school http

Last synced: 6 months ago
JSON representation

This project is here to make you write your HTTP server. You will be able to test it with a real browser. HTTP is one of the most used protocols on the internet. Knowing its arcane will be useful, even if you won’t be working on a website.

Awesome Lists containing this project

README

          

# webserv
This project is here to make you write your HTTP server. You will be able to test it with a real browser. HTTP is one of the most used protocols on the internet. Knowing its arcane will be useful, even if you won’t be working on a website.

**Tutorials**
- [Building a simple web serveur in c++](https://ncona.com/2019/04/building-a-simple-server-with-cpp/)
- [C++ Web Programming: CGI program](https://www.tutorialspoint.com/cplusplus/cpp_web_programming.htm)
- [HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP)
- [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)
- [Manage a socket flow of events using poll()](https://www.ibm.com/docs/en/i/7.2?topic=designs-using-poll-instead-select)
- [C++ programming applied to network](https://bousk.developpez.com/cours/reseau-c++/) (in French)
- [Network programming](https://beej.us/guide/bgnet/)

**HTTP documentation**
- [RFC 2616: HTTP 1.1 protocol](https://datatracker.ietf.org/doc/html/rfc2616)
- [RFC 7230: HTTP/1.1 Message Syntax and Routing](https://www.rfc-editor.org/rfc/pdfrfc/rfc7230.txt.pdf)
- [List of HTTP status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
- [Content-Type](https://docs.microsoft.com/en-us/previous-versions/exchange-server/exchange-10/ms526508(v=exchg.10)?redirectedfrom=MSDN)
- [Content-Type Stack List](https://stackoverflow.com/questions/23714383/what-are-all-the-possible-values-for-http-content-type-header)
- [Content-Type Full List](https://www.iana.org/assignments/media-types/media-types.xhtml)
- [Tres bon site aussi !](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/)
- [HTTP messages](https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages)
- [Redirections](https://developer.mozilla.org/fr/docs/Web/HTTP/Redirections)

**Useful RFCs**
- [RFC editor](https://www.rfc-editor.org/retrieve/): official source for RFCs on the World Wide Web.
- [RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax](https://datatracker.ietf.org/doc/html/rfc2396): useful definitions of URI, port and host

**Useful C functions**
- [socket](https://man7.org/linux/man-pages/man2/socket.2.html): creates an endpoint for communication and returns a file descriptor that refers to that endpoint.
- [listen](https://man7.org/linux/man-pages/man2/listen.2.html): listens for connections on a socket.
- [poll](https://man7.org/linux/man-pages/man2/poll.2.html): waits for one of a set of file descriptors to become ready to perform I/O.
- [accept](https://man7.org/linux/man-pages/man2/accept.2.html): accepts a connection on a socket.

**CGI Doc**
- [RFC 3875: CGI](https://www.rfc-editor.org/rfc/rfc3875.pdf)
- [Best CGI Exemple](https://www.fi.muni.cz/usr/jkucera/tic/tic0305.html): Programmation CGI in C++.
- [CGI Environmnent Variables](https://fr.wikipedia.org/wiki/Variables_d%27environnement_CGI)
- [Good CGI Howto (and cookies)](http://www.purplepixie.org/cgi/howto.php)
- [Some exemples](https://pub.phyks.me/sdz/sdz/ecrivez-votre-site-web-en-c-avec-la-cgi.html)

**Tools**
- [Super Mega Site pour tester les Headers !](https://reqbin.com/)
- [cURL "--resolve"; curl -H "Host: ..."](https://sodocumentation.net/curl/topic/10565/name-resolve-curl-tricks) (for testing different server names).

**Server model: nginx documentation**
- [Inside Nginx architecture](https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/)
- [Understanding Nginx Server and Location Block Selection Algorithms](https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms)