├── .vscode
├── launch.json
└── tasks.json
├── Makefile
├── README.md
├── client
├── client.cpp
├── configs
├── default.config
└── test.config
├── flowchart
├── CGI.drawio
├── CGI.png
├── DELETE.drawio
├── DELETE.png
├── GET.drawio
├── GET.png
├── POST.drawio
├── POST.png
├── REDIRECTION.drawio
└── REDIRECTION.png
├── incs
├── Client.hpp
├── Config.hpp
├── FdBase.hpp
├── Libft.hpp
├── Location.hpp
├── Request.hpp
├── Resource.hpp
├── Response.hpp
├── Server.hpp
└── Webserv.hpp
├── srcs
├── Client.cpp
├── Config.cpp
├── FdBase.cpp
├── Libft.cpp
├── Location.cpp
├── Request.cpp
├── Resource.cpp
├── Response.cpp
├── Server.cpp
├── Webserv.cpp
├── addResponse.cpp
├── cgiResponse.cpp
└── main.cpp
└── tests
├── test1
├── asb
├── directory
│ ├── Yeah
│ │ └── not_happy.bad_extension
│ ├── index.html
│ ├── other.pouic
│ ├── youpi.bad_extension
│ └── youpi.php
├── error404.html
├── floder
│ └── file1.html
├── index.html
├── index33.html
└── youpi.php
└── tester_bin
├── cgi_tester
├── first.pl
├── php-cgi
└── tester
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 |
8 | {
9 | "name": "(lldb) 시작",
10 | "type": "lldb",
11 | "request": "launch",
12 | "program": "${workspaceFolder}/webserv",
13 | "args": [],
14 | "stopAtEntry": false,
15 | "cwd": "${workspaceFolder}",
16 | "environment": [],
17 | "externalConsole": false,
18 | "MIMode": "lldb"
19 | },
20 | {
21 | "name": "gcc build and debug active file",
22 | "type": "cppdbg",
23 | "request": "launch",
24 | "program": "${fileDirname}/a.out",
25 | "args": [],
26 | "stopAtEntry": false,
27 | "cwd": "${workspaceFolder}",
28 | "environment": [],
29 | "externalConsole": false,
30 | "MIMode": "lldb",
31 | "preLaunchTask": "gcc build active file"
32 | }
33 | ]
34 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "runner": "terminal",
4 | "type": "shell",
5 | "echoCommand": true,
6 | "presentation" : { "reveal": "always" },
7 | "tasks": [
8 | {
9 | "label": "save and compile for C++",
10 | "command": "g++",
11 | "args": [
12 | "${file}",
13 | "-g",
14 | "-o",
15 | "${fileDirname}/${fileBasenameNoExtension}"
16 | ],
17 | "group": "build",
18 | "problemMatcher": {
19 | "fileLocation": [
20 | "relative",
21 | "${workspaceRoot}"
22 | ],
23 | "pattern": {
24 | "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
25 | "file": 1,
26 | "line": 2,
27 | "column": 3,
28 | "severity": 4,
29 | "message": 5
30 | }
31 | }
32 | },
33 | {
34 | "label": "save and compile for C",
35 | "command": "gcc",
36 | "args": [
37 | "${file}",
38 | "-g",
39 | "-o",
40 | "${fileDirname}/a.out"
41 | ],
42 | "group": "build",
43 | "problemMatcher": {
44 | "fileLocation": [
45 | "relative",
46 | "${workspaceRoot}"
47 | ],
48 | "pattern": {
49 | "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
50 | "file": 1,
51 | "line": 2,
52 | "column": 3,
53 | "severity": 4,
54 | "message": 5
55 | }
56 | }
57 | },
58 | {
59 | "label": "execute",
60 | "command": "cmd",
61 | "group": "test",
62 | "args": [
63 | "/C",
64 | "${fileDirname}\\${fileBasenameNoExtension}"
65 | ]
66 | },
67 | {
68 | "type": "shell",
69 | "label": "clang build active file",
70 | "command": "/usr/bin/clang",
71 | "args": [
72 | "-g",
73 | "${file}",
74 | "-o",
75 | "${fileDirname}/${fileBasenameNoExtension}"
76 | ],
77 | "options": {
78 | "cwd": "/usr/bin"
79 | },
80 | "problemMatcher": [
81 | "$gcc"
82 | ],
83 | "group": "build"
84 | }
85 | ]
86 | }
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | GREEN = \033[0;32m
2 | RED = \033[0;31m
3 | LIGHT_SKYBLUE_COLOR=\033[36m\033[01m
4 | CLEAR = \033[0m
5 |
6 | NAME = webserv
7 | CC = clang++ -std=c++98
8 | # FLAGS = -Wall -Wextra -Werror -g3 -fsanitize=address
9 | FLAGS = -Wall -Wextra -Werror -g
10 |
11 | DIR_HEADER = ./incs/
12 | DIR_SRC = ./srcs/
13 |
14 | SRC = Request.cpp Response.cpp cgiResponse.cpp addResponse.cpp Resource.cpp Client.cpp main.cpp Config.cpp Libft.cpp FdBase.cpp Server.cpp Location.cpp Webserv.cpp
15 |
16 | SRCS = $(addprefix $(DIR_SRC), $(SRC))
17 | OBJS = $(SRCS:%.cpp=%.o)
18 |
19 | all: $(NAME)
20 |
21 | $(NAME): $(OBJS)
22 | @$(CC) $(FLAGS) -I $(DIR_HEADER) $(OBJS) -o $(NAME)
23 | @echo "$(LIGHT_SKYBLUE_COLOR)MAKEFILE DONE$(CLEAR)"
24 |
25 | %.o: %.cpp
26 | @$(CC) $(FLAGS) -I $(DIR_HEADER) -c $< -o $@
27 | @echo "$(GREEN)Compiled "$<" successfully!$(CLEAR)"
28 |
29 | clean:
30 | @echo "$(RED)rm $(OBJS)$(CLEAR)"
31 | @rm -f $(OBJS)
32 | @echo "$(GREEN)clean successfully!$(CLEAR)"
33 |
34 | fclean: clean
35 | @echo "$(RED)rm $(NAME)$(CLEAR)"
36 | @rm -f $(NAME)
37 | @echo "$(GREEN)fclean successfully!$(CLEAR)"
38 |
39 | re: fclean all
40 |
41 | .PHONY: all clean fclean re
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # webserv
4 |
5 | webserv is a I/O Multiplexing HTTP/1.1 server.
6 |
7 | ## Authors
8 |
9 | * [selim](https://github.com/seohl16)
10 | * [jiholee](https://github.com/zittoooo)
11 |
12 | 👉 노션 페이지
13 |
14 |
15 |
16 | ## 1. Build & Usage
17 |
18 | ```shell
19 | # Compile the sources
20 | make
21 | ```
22 | ```shell
23 | # Run the server (if no
24 | ./webserv [config_file]
25 | ```
26 |
27 |
28 | ## 2. Features
29 | - Nginx-like configuration file
30 | - HTTP Protocol (ex. status line, request line...)
31 | - HTTP 1.1 Header
32 | - I/O multiplexing (kqueue)
33 | - GET, POST, DELETE HTTP methods
34 | - HTTP redirections
35 | - HTTP response status codes (ex. 200, 301...)
36 | - CGI implementation (ex. bla, php...)
37 | - Auto Index on/off
38 |
39 |
40 | ## 3. Configuration File Example
41 |
42 | ```
43 | server
44 | {
45 | server_name default
46 | listen 8180 127.0.0.1
47 |
48 | location /
49 | {
50 | error_page 404 ./tests/test1/error404.html
51 | allow_methods GET POST DELETE
52 | root ./tests/test1/
53 | index index.html index2.html
54 | auto_index on
55 | cgi_info .php ./tests/tester_bin/php-cgi
56 | cgi_info .bla ./tests/tester_bin/cgi_tester
57 | }
58 |
59 | location /auth/
60 | {
61 | allow_methods GET POST DELETE
62 | request_max_body_size 42
63 | root ./tests/test1/
64 | index index.html index2.html
65 | auto_index on
66 | cgi_info .php ./tests/tester_bin/php-cgi
67 | auth_key selim:1234
68 | }
69 | }
70 |
71 | ```
72 | - `server` : server block
73 | - `listen` : port and ip
74 | - `location` : set for specific route
75 | - `error_page` : path for custom error page
76 | - `allow_method` : allowed methods for HTTP requests
77 | - `index` : default file for the requested URI
78 | - `cgi_info` : cgi execute for specific file extension
79 | - `request_max_body_size` : max limit for request body size
80 | - `auth_key` : authorization needed
81 |
82 | ## 4. Test
83 | - curl
84 | ```
85 | curl -X POST -H “Content-Type: plain/text” –data “BODY is here and write something longer or shorter than limit”
86 | ```
87 | - Postman
88 |
89 | ```
90 | [POST] localhost:8179/index.html
91 | ```
92 |
93 |
94 | ```
95 | [GET/DELETE] localhost:8179/index
96 | ```
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | - Browser
106 | ```
107 | localhost:8182
108 | ```
109 |
110 |
111 |
112 |
113 | ```
114 | localhost:8180/youpi.php
115 | ```
116 |
117 |
118 |
119 | - Siege
120 | ```shell
121 | # 소켓 제한을 풀어주는 명령어
122 | sudo sysctl -w net.inet.tcp.msl=100
123 |
124 | # seige 명령어
125 | siege -b -R <(echo connection = keep-alive) -c100 127.0.0.1:8180
126 | ```
127 |
128 |
129 |
130 |
131 | ## 5. HTTP Method function explained with flowchart
132 |
133 | ### 5.1. GET
134 |
135 |
136 |
137 |
138 | ### 5.2. POST
139 |
140 |
141 |
142 |
143 | ### 5.3. DELETE
144 |
145 |
146 |
147 | ### 5.4. REDIRECTION
148 |
149 |
150 |
151 |
152 | ### 5.5. CGI
153 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/client:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/client
--------------------------------------------------------------------------------
/client.cpp:
--------------------------------------------------------------------------------
1 | /* echo_client.c
2 | **데이터를 보낼 서버에 연결 요청을 보내고 수락되는 일반적인 클라이언트의 과정을 거치게 되고,
3 | **연결이 완료되면 서버로 데이터를 전송하고 에코(echo)되어 돌아오는 데이터를 수신하는 과정을 거치게 된다.
4 | */
5 |
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #define BUFSIZE 1024
14 |
15 | void error_handling(char *message);
16 |
17 | int main(int argc, char **argv)
18 | {
19 | int sock;
20 | struct sockaddr_in serv_addr;
21 | char message[BUFSIZE];
22 | int str_len;
23 | if (argc != 3)
24 | {
25 | printf("Usage : %s \n", argv[0]);
26 | exit(1);
27 | }
28 | sock = socket(PF_INET, SOCK_STREAM, 0); /* 서버 접속을 위한 소켓 생성 */
29 | if (sock == -1)
30 | error_handling("socket() error");
31 | memset(&serv_addr, 0, sizeof(serv_addr));
32 | serv_addr.sin_family = AF_INET;
33 | serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
34 | serv_addr.sin_port = htons(atoi(argv[2]));
35 | if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
36 | error_handling("connect() error");
37 | while (1)
38 | {
39 | /* 메시지 입력 전송*/
40 | fputs("전송할 메시지를 입력하세요(q to quit) : ", stdout);
41 | fgets(message, BUFSIZE, stdin);
42 | if (!strcmp(message, "q\n"))
43 | break;
44 | send(sock, message, strlen(message), 0);
45 | /* 메시지 수신 출력 */
46 | // str_len = recv(sock, message, BUFSIZE - 1, 0);
47 | // message[str_len] = 0;
48 | // printf("서버로부터 전송된 메시지 : %s \n", message);
49 | }
50 | close(sock);
51 | return 0;
52 | }
53 |
54 | void error_handling(char *message)
55 | {
56 | fputs(message, stderr);
57 | fputc('\n', stderr);
58 | exit(1);
59 | }
--------------------------------------------------------------------------------
/configs/default.config:
--------------------------------------------------------------------------------
1 | #주석가능하긴한데 예약어로 쓰인 것들은 적으면 안됩니다. 예약어 기준으로 파싱합니다.
2 | #얌체같이 파싱했습니다.
3 | #로케이션 중에 루트 로케이션 ( / ) 는 사용하지 않더라도반드시 필요합니다. 제발 써주세요.
4 |
5 | server
6 | {
7 | server_name default
8 | listen 8180 127.0.0.1 # 7번라인 8번라인 반드시 연달아와야합니다. 만약 서버네임을 입력하고 싶지 않다면, 7번라인 값에 NONE 을 입력합니다. (그래도 8번라인은 필요합니다.)
9 |
10 | location / # / 로케이션은 반드시 존재해야합니다. (디폴트서버)
11 | {
12 | error_page 404 ./tests/test1/error404.html
13 | error_page 405 ./tests/test1/error405.html
14 | allow_methods GET POST DELETE
15 | root ./tests/test1/
16 | index index.html index2.html
17 | auto_index on
18 | cgi_info .php ./tests/tester_bin/php-cgi
19 | cgi_info .bla ./tests/tester_bin/cgi_tester
20 | }
21 |
22 | location /virtual/
23 | {
24 | allow_methods GET POST DELETE
25 | request_max_body_size 42
26 | root ./tests/test1/
27 | index index.html index2.html
28 | auto_index on
29 | cgi_info .php ./tests/tester_bin/php-cgi
30 | auth_key selim:1234
31 | }
32 | }
33 |
34 | server
35 | {
36 | server_name second
37 | listen 8181 127.0.0.1
38 |
39 | location /
40 | {
41 | allow_methods GET
42 | root ./tests/test1/
43 | index second.html
44 | }
45 | }
46 |
47 | server
48 | {
49 | server_name google.com
50 | listen 8182 127.0.0.1
51 |
52 | location /
53 | {
54 | allow_methods GET
55 | return 301 http://google.com
56 | }
57 | }
--------------------------------------------------------------------------------
/configs/test.config:
--------------------------------------------------------------------------------
1 | #주석가능하긴한데 예약어로 쓰인 것들은 적으면 안됩니다. 예약어 기준으로 파싱합니다.
2 | #얌체같이 파싱했습니다.
3 | #로케이션 중에 루트 로케이션 ( / ) 는 사용하지 않더라도반드시 필요합니다. 제발 써주세요.
4 |
5 | server
6 | {
7 | server_name default
8 | listen 8176 127.0.0.1 # 7번라인 8번라인 반드시 연달아와야합니다. 만약 서버네임을 입력하고 싶지 않다면, 7번라인 값에 NONE 을 입력합니다. (그래도 8번라인은 필요합니다.)
9 |
10 | location / # / 로케이션은 반드시 존재해야합니다. (디폴트서버)
11 | {
12 | error_page 404 ./tests/test1/error404.html
13 | error_page 405 ./tests/test1/error405.html
14 | allow_methods GET DELETE
15 | root ./tests/test1/
16 | index index.html index2.html
17 | auto_index off
18 | cgi_info .bla ./tests/tester_bin/cgi_tester
19 | cgi_info .php ./tests/tester_bin/php-cgi
20 | }
21 |
22 | location /directory/ # / 로케이션은 반드시 존재해야합니다. (디폴트서버)
23 | {
24 | error_page 404 ./tests/test1/error404.html
25 | error_page 405 ./tests/test1/error405.html
26 | allow_methods GET DELETE
27 | root ./tests/test1/directory/
28 | index index.html index2.html
29 | auto_index off
30 | cgi_info .bla ./tests/tester_bin/cgi_tester
31 | cgi_info .php ./tests/tester_bin/php-cgi
32 | }
33 |
34 | location /directory/nop/ # / 로케이션은 반드시 존재해야합니다. (디폴트서버)
35 | {
36 | error_page 404 ./tests/test1/error404.html
37 | error_page 405 ./tests/test1/error405.html
38 | allow_methods GET DELETE
39 | root ./tests/test1/directory/
40 | index index.html index2.html
41 | auto_index on
42 | cgi_info .bla ./tests/tester_bin/cgi_tester
43 | cgi_info .php ./tests/tester_bin/php-cgi
44 | }
45 |
46 | location /virtual/
47 | {
48 | allow_methods GET POST DELETE
49 | request_max_body_size 42
50 | root ./tests/test1/
51 | cgi_info .php ./tests/tester_bin/php-cgi
52 | auth_key selim:1234
53 | }
54 | }
55 |
56 | server
57 | {
58 | server_name second
59 | listen 8178 127.0.0.1
60 |
61 | location /test
62 | {
63 | allow_methods GET
64 | root ./tests/test1/
65 | index second.html
66 | }
67 | }
68 |
69 | server
70 | {
71 | server_name google.com
72 | listen 8177 127.0.0.1
73 |
74 | location /
75 | {
76 | allow_methods GET
77 | return 301 http://google.com
78 | }
79 | }
--------------------------------------------------------------------------------
/flowchart/CGI.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/flowchart/CGI.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/flowchart/CGI.png
--------------------------------------------------------------------------------
/flowchart/DELETE.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/flowchart/DELETE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/flowchart/DELETE.png
--------------------------------------------------------------------------------
/flowchart/GET.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/flowchart/GET.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/flowchart/GET.png
--------------------------------------------------------------------------------
/flowchart/POST.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/flowchart/POST.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/flowchart/POST.png
--------------------------------------------------------------------------------
/flowchart/REDIRECTION.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/flowchart/REDIRECTION.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/42-Workmap/webserv/14751af9e449b17b1a7345a1e8078aabb3adde75/flowchart/REDIRECTION.png
--------------------------------------------------------------------------------
/incs/Client.hpp:
--------------------------------------------------------------------------------
1 | #ifndef CLIENT_HPP
2 | # define CLIENT_HPP
3 |
4 | #include
5 | #include
6 | #include
7 | #include