Skip to content

Latest commit

 

History

History
85 lines (64 loc) · 4.34 KB

README.md

File metadata and controls

85 lines (64 loc) · 4.34 KB

HTTP web server


Описание задачи

Написать HTTP сервер по стандарту RFC 7230-7235 на С++, реализовав:

1. Соединение клиент-сервер;

2. Запуск двух и более серверов;

3. Методы GET, POST, PUT, HEAD;

4. Коды состояний, обработка ошибок;

5. Заголовки запроса/ответа

6. Принятие chunked запроса

7. Автоиндексация

8. Поддержку CGI скриптов

9. Авторизацию клиентов

10. Настраиваемый конфигурационный файл

За основу было взято оригинальное поведение Nginx.


Настройка конфигурационного файла

В основной структуре сервера мы можем указать:

1. listen - порты сервера;

Пример: "listen 80 81"

2. server_name - наименование сервера;

Пример: "server_name example.com"

3. root - корневая директория;

Пример: "root /Users/pcatrina/Desktop/workspace/webserv/webserv/resources"

4. error_page - путь до файла, который будет отображаться вместо страницы ошибки;

Пример: "error_page 405 /40x.html"

5. autoindex - on/off автоиндексацию;

Пример: "autoindex off"


В структуре location мы можем указать:

1. root - корневая директория;

Пример: "root /Users/pcatrina/Desktop/workspace/webserv/webserv/resources/42_test"

2. index - отображаемая страница;

Пример: "index index.html"

3. limit_except - разрешенные методы у location;

Пример: "limit_except POST GET"

4. limit_client_body_size - лимит на посылаемое body от клиента;

Пример: "limit_client_body_size 10"

5. fastcgi_pass - путь до интерпретатора CGI скриптов;

Пример: "fastcgi_pass /Users/pcatrina/Desktop/workspace/webserv/webserv/resources/42_test/cgi_tester;"

6. auth_basic - заголовок авторизации;

Пример: "auth_basic ruslan:ruslan"

Авторизация в данном проекте сделана посредством Basic-авторизации. Логин:пароль авторизованных клиентов хранится в файле.

7. client_max_body_size - ограничение на максимальный размер тела запроса;

Пример: "client_max_body_size 100"


(!) Программа принимает конфигурационный файл в качестве аргумента. (!)

Ссылки

RFC 7230

А. В. Столяров "Системы и сети"

HTTP заголовки

HTTP коды состояний

Заметки по проекту

Проект написан по стандарту С++ 98.