Основная цель этой лаборатории - создать веб -сервер CGI HTTP на основе RFC/1945. Сервер построен на программировании и абстракции Cocket Socket до сих пор в INET 4021 - сетевое программирование.
Кроме того, сервер должен быть эффективным в отношении скорости и распределения ресурсов.
Наш сервер использует CGI в качестве абстракции для получения входов из формы HTML, а затем возвращает выход. Клиент понятия не имеет, что CGI там, но он счастлив, когда он получает ответ, независимо от того, от кого это.
Что касается нашего алгоритма, сервер берет вход, а затем анализирует его, чтобы найти, если это запрос Post/Get, затем отправляет данные в CGI для обработки.
/cgi -bin - он содержит наши файлы CGI, используемые для обработки POST и получения запросов (где проживает исполняемый веб -сервер).
Когда клиент отправляет запрос POST/GET на сервер, сервер вызовет исполняемый файл CGI для обработки запроса. Основное использование для этого состоит в том, чтобы позволить исполняемому файлу обрабатывать работу, в то время как сервер просто передает ее, а затем может обрабатывать новые запросы. Это хорошее использование распределения ресурсов и помогает одновременно поддерживать больше пользователей.
/conf - папка конфигурации содержит файл httpd.conf, который является файлом конфигурации для сервера. В нем говорится количество одновременных пользователей, местоположение корневого контента, местоположение индекса и порт для запуска.
/Содержание - все .html, .gif, .jpg (Содержимое) находится в этой папке. Когда index.html получен, он отправляет запросы на все эти файлы. Эти файлы используются для создания веб -страницы, которая отображается в браузере клиента.
/logs - Эта папка содержит файлы журнала для всех команд доступа, а также ошибки. Стандарт будет перейти к журналу доступа, а все другие журналы ошибок перейдут в журнал ошибок.
/src - вот где находится весь наш исходный код. По сути, это папка, где находится сервер.
Index.html - Индекс каталогов Webserver
Чтобы скомпилировать GET и POST CGI, перейдите на каталог /src . Составьте файл C. Это можно сделать
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Чтобы проверить сервер, перейдите в каталог /src . Скомпилируйте файл C и запустите его. Это можно сделать:
gcc server.c && ./a.out
Сервер будет работать на основе содержимого, указанного в файле конфигурации. В случае неизменного, терминал вернется:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
Теперь, используя веб -браузер, введите «http: // localhost: 8080/». Это загрузит файл index.html и отобразит веб -страницу. Кроме того, вы можете загрузить определенные файлы, выполнив «http: // localhost: 8080/filename». Если файл существует, он будет отображаться (показано ниже). В противном случае будет Error 404 - File Not Found .

Прежде чем мы начнем, важно отметить, что когда сервер отправляет сообщение клиенту веб -браузера, ему предшествует заголовок HTTP. Примером этого является:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
Это отправляет ошибку обратно клиенту HTTP, потому что запрошенный файл не может быть найден. Другие формы используют «200 OK», «500 внутренний сервер ошибка» и «501 не реализованы» вместо «404 не найдены», но в противном случае содержит ту же форму. Вы редактируете вторую строку в зависимости от того, какой контент вы отправляете. Затем вы можете отправить данные после двух новых линий.
Когда клиент запрашивает файл, сервер получает запрос GET. Каждый запрос может иметь много итеративных вызовов на сервер для файлов с добавлением, таких как запрос index.html для вызова других изображений. Затем сервер отправляет запрос в CGI (общий интерфейс шлюза). Цель использования CGI заключается в динамических веб -взаимодействиях, таких как форма, путем добавления бэкэнд -приложений, которые берут данные (входные данные) из формы HTML. Другой тип запроса - это пост. Это когда клиент отправляет данные на сервер. Мы приведем пример каждого.
Пример сообщения: если вы перейдете на «http: // localhost: 8080/form.htm», вы можете отправить сообщение на сервер. Форму будут отправлены и обрабатываются исполняемым веб -сервером CGI в качестве запроса POST. Наша форма примера принимает два входа слова, отправляет форму и данные в CGI, а CGI отправляет обратно форму и содержимое (которое является конкатенированной строкой). Это пример того, как CGI обрабатывает запросы поста.
Получить пример: это когда клиент пытается получить файл с сервера. Это случается часто, особенно когда запрошен файл <index.htm>. CGI пытается найти файл, если он не может, тогда он отправляет ошибку 404, не найденную, найденную выше, клиенту.
Если файл найден, то сервер отправляет запрос обратно, например, как
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
Первый кусок текста - заголовок HTTP. Содержание будет заменено содержимым файла. Затем браузер отобразит этот контент. Вот как ручки CGI получают запросы.
Предполагая, что клиент является пользователем, а администратор - сервер ...
Администратор - цель этого проекта для администраторов состоит в том, чтобы увидеть, как обрабатывать сообщения и получить запросы в исполняемом веб -сервере. Программирование сервера также помогает понять, как отправлять заголовки HTTP и общаться с веб -страницей, а также просматривать файлы и отправлять их на веб -страницу.
Пользователь - цель этого проекта для пользователей - научиться ориентироваться в веб -страницах и что означают определенные ошибки при получении. Например, если попытаться загрузить файл с сервера, который не существует, будет ошибка файла 404, не найденная.