sort readme todo
This commit is contained in:
77
README.md
77
README.md
@@ -1,6 +1,8 @@
|
||||
|
||||
---
|
||||
## for correction
|
||||
|
||||
---
|
||||
## man
|
||||
|
||||
- **htons, htonl, ntohs, ntohl :** converts the unsigned short or integer argument between host byte order and network byte order
|
||||
@@ -18,36 +20,12 @@
|
||||
- **getsockname :** returns the current address to which a socket fd is bound
|
||||
- **fcntl :** manipulate an open fd, by performing some actions, like duplicate it or changing its flags
|
||||
|
||||
---
|
||||
## todo
|
||||
|
||||
- [ ] read the RFC and do some tests with telnet and NGINX
|
||||
#### parsing config
|
||||
- [ ] Your program has to take a configuration file as argument, or use a default path.
|
||||
- [ ] You can’t execve another web server.
|
||||
- [ ] Your server must never block and the client can be bounced properly if necessary.
|
||||
- [ ] It must be non-blocking and use only 1 poll() (or equivalent) for all the I/O operations between the client and the server (listen included).
|
||||
- [ ] poll() (or equivalent) must check read and write at the same time.
|
||||
- [ ] You must never do a read or a write operation without going through poll() (or equivalent).
|
||||
- [ ] Checking the value of errno is strictly forbidden after a read or a write operation.
|
||||
- [ ] You don’t need to use poll() (or equivalent) before reading your configuration file. Because you have to use non-blocking file descriptors, it is possible to use read/recv or write/send functions with no poll() (or equivalent), and your server wouldn’t be blocking. But it would consume more system resources. Thus, if you try to read/recv or write/send in any file descriptor without using poll() (or equivalent), your grade will be 0.
|
||||
- [ ] You can use every macro and define like FD_SET, FD_CLR, FD_ISSET, FD_ZERO (understanding what and how they do it is very useful).
|
||||
- [ ] A request to your server should never hang forever.
|
||||
- [ ] Your server must be compatible with the web browser of your choice.
|
||||
- [ ] We will consider that NGINX is HTTP 1.1 compliant and may be used to compare headers and answer behaviors.
|
||||
- [ ] Your HTTP response status codes must be accurate.
|
||||
- [ ] You server must have default error pages if none are provided.
|
||||
- [ ] You can’t use fork for something else than CGI (like PHP, or Python, and so forth).
|
||||
- [ ] You must be able to serve a fully static website.
|
||||
- [ ] Clients must be able to upload files.
|
||||
- [ ] You need at least GET, POST, and DELETE methods.
|
||||
- [ ] Stress tests your server. It must stay available at all cost.
|
||||
- [ ] Your server must be able to listen to multiple ports (see Configuration file)
|
||||
- [ ] Your server should never die.
|
||||
- [ ] Do not test with only one program.
|
||||
- [ ] Write your tests with a more convenient language such as Python or Golang, and so forth. Even in C or C++ if you want to
|
||||
- [ ] You must provide some configuration files and default basic files to test and demonstrate every feature works during evaluation.
|
||||
|
||||
### In the configuration file, you should be able to:
|
||||
|
||||
- [ ] Choose the port and host of each ’server’.
|
||||
- [ ] Setup the server_names or not.
|
||||
- [ ] The first server for a host:port will be the default for this host:port (that means it will answer to all the requests that don’t belong to an other server).
|
||||
@@ -61,14 +39,45 @@
|
||||
- [ ] Set a default file to answer if the request is a directory.
|
||||
- [ ] Execute CGI based on certain file extension (for example .php).
|
||||
- [ ] Make the route able to accept uploaded files and configure where they should be saved.
|
||||
- [ ] Do you wonder what a CGI is?
|
||||
- [ ] Because you won’t call the CGI directly, use the full path as PATH_INFO.
|
||||
- [ ] Just remember that, for chunked request, your server needs to unchunked it and the CGI will expect EOF as end of the body.
|
||||
- [ ] Same things for the output of the CGI. If no content_length is returned from the CGI, EOF will mark the end of the returned data.
|
||||
- [ ] Your program should call the CGI with the file requested as first argument.
|
||||
- [ ] The CGI should be run in the correct directory for relative path file access.
|
||||
- [ ] Your server should work with one CGI (php-CGI, Python, and so forth).
|
||||
#### connection basic
|
||||
- [ ] You can’t execve another web server.
|
||||
- [ ] Your server must never block and the client can be bounced properly if necessary.
|
||||
- [ ] It must be non-blocking and use only 1 poll() (or equivalent) for all the I/O operations between the client and the server (listen included).
|
||||
- [ ] poll() (or equivalent) must check read and write at the same time.
|
||||
- [ ] You must never do a read or a write operation without going through poll() (or equivalent).
|
||||
- [ ] Checking the value of errno is strictly forbidden after a read or a write operation.
|
||||
- [ ] You don’t need to use poll() (or equivalent) before reading your configuration file. Because you have to use non-blocking file descriptors, it is possible to use read/recv or write/send functions with no poll() (or equivalent), and your server wouldn’t be blocking. But it would consume more system resources. Thus, if you try to read/recv or write/send in any file descriptor without using poll() (or equivalent), your grade will be 0.
|
||||
- [ ] You can use every macro and define like FD_SET, FD_CLR, FD_ISSET, FD_ZERO (understanding what and how they do it is very useful).
|
||||
- [ ] A request to your server should never hang forever.
|
||||
- [ ] Your server must be compatible with the web browser of your choice.
|
||||
#### parsing request HTTP (fields, ...)
|
||||
- [ ] We will consider that NGINX is HTTP 1.1 compliant and may be used to compare headers and answer behaviors.
|
||||
#### response HTTP (fields, ...)
|
||||
- [ ] Your HTTP response status codes must be accurate.
|
||||
- [ ] You server must have default error pages if none are provided.
|
||||
- [ ] You can’t use fork for something else than CGI (like PHP, or Python, and so forth).
|
||||
- [ ] You must be able to serve a fully static website.
|
||||
#### upload files
|
||||
- [ ] Clients must be able to upload files.
|
||||
#### CGI
|
||||
- [ ] You need at least GET, POST, and DELETE methods.
|
||||
- [ ] Do you wonder what a CGI is?
|
||||
- [ ] Because you won’t call the CGI directly, use the full path as PATH_INFO.
|
||||
- [ ] Just remember that, for chunked request, your server needs to unchunked it and the CGI will expect EOF as end of the body.
|
||||
- [ ] Same things for the output of the CGI. If no content_length is returned from the CGI, EOF will mark the end of the returned data.
|
||||
- [ ] Your program should call the CGI with the file requested as first argument.
|
||||
- [ ] The CGI should be run in the correct directory for relative path file access.
|
||||
- [ ] Your server should work with one CGI (php-CGI, Python, and so forth).
|
||||
#### write tests
|
||||
- [ ] Stress tests your server. It must stay available at all cost.
|
||||
- [ ] Do not test with only one program.
|
||||
- [ ] Write your tests with a more convenient language such as Python or Golang, and so forth. Even in C or C++ if you want to
|
||||
#### persistent connexion
|
||||
- [ ] Your server must be able to listen to multiple ports (see Configuration file)
|
||||
- [ ] Your server should never die.
|
||||
|
||||
|
||||
---
|
||||
## ressources
|
||||
|
||||
- [create an http server](https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa)
|
||||
@@ -76,7 +85,9 @@
|
||||
- [same, translated in french](http://vidalc.chez.com/lf/socket.html)
|
||||
- [bind() vs connect()](https://stackoverflow.com/questions/27014955/socket-connect-vs-bind)
|
||||
- [INADDR_ANY for bind](https://stackoverflow.com/questions/16508685/understanding-inaddr-any-for-socket-programming)
|
||||
- [hack with CGI](https://www.youtube.com/watch?v=ph6-AKByBU4)
|
||||
|
||||
---
|
||||
## code architecture
|
||||
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ void Webserv::_connect_socket(int i, int bufsize)
|
||||
printf(" %d bytes received\n", len);
|
||||
|
||||
ret = send(_fds[i].fd, &buffer[0], len, 0);
|
||||
printf(" send\n");
|
||||
if (ret < 0)
|
||||
{
|
||||
::perror(" send() failed");
|
||||
|
||||
Reference in New Issue
Block a user