이 실험실의 주요 목표는 RFC/1945를 기반으로 CGI HTTP 웹 서버를 만드는 것입니다. 이 서버는 INET 4021- 네트워크 프로그래밍에서 지금까지 배운 C 소켓 프로그래밍 및 추상화를 기반으로합니다.
또한 서버는 속도 및 리소스 할당과 관련하여 효율적이어야합니다.
당사의 서버는 CGI를 추상화로 사용하여 HTML 양식에서 입력을 가져온 다음 출력을 반환합니다. 클라이언트는 CGI가 있다는 것을 알지 못하지만 누구에게 상관없이 응답을받을 때 행복합니다.
알고리즘의 경우 서버가 입력을 가져온 다음 Post/GET 요청인지 확인하여 처리를 위해 데이터를 CGI로 보냅니다.
/CGI -BIN- 게시물을 처리하고 요청을 가져 오는 데 사용되는 CGI 파일이 포함되어 있습니다 (실행 가능한 웹 서버가 거주하는 경우).
클라이언트가 서버에 게시물/GET 요청을 보내면 서버는 CGI 실행 파일을 호출하여 요청을 처리합니다. 이를위한 주된 용도는 실행 파일이 작업을 처리 할 수 있도록하는 반면 서버는 단지 전달 된 다음 새 요청을 처리 할 수 있습니다. 이는 리소스 할당을 잘 사용하며 더 많은 사용자를 동시에 지원하는 데 도움이됩니다.
/conf- 구성 폴더에는 서버의 구성 파일 인 httpd.conf 파일이 포함되어 있습니다. 동시 사용자의 양, 루트 컨텐츠 위치, 인덱스 위치 및 포트를 실행할 수 있습니다.
/내용 - 모든 .html, .gif, .jpg (내용)는이 폴더에 있습니다. index.html이 수신되면 이러한 모든 파일에 대한 요청을 보냅니다. 이 파일은 클라이언트 브라우저에 표시되는 웹 페이지를 만드는 데 사용됩니다.
/로그 - 이 폴더에는 모든 액세스 명령에 대한 로그 파일과 오류가 포함되어 있습니다. 표준 아웃은 액세스 로그로 이동하고 다른 모든 오류 로그는 오류 로그로 이동합니다.
/SRC- 모든 소스 코드가있는 곳입니다. 이것은 본질적으로 서버가있는 폴더입니다.
index.html- 웹 서버 디렉토리 인덱스
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 클라이언트를 뒤로 돌리는 오류가 전송됩니다. 다른 양식은 "404를 찾을 수 없음"대신 "200 OK", "500 내부 서버 오류"및 "501 구현"을 사용하지만 동일한 양식을 보유합니다. 당신이 보내는 컨텐츠에 따라 두 번째 줄을 편집합니다. 그런 다음 두 개의 새 줄 후에 데이터를 보낼 수 있습니다.
클라이언트가 파일을 요청하면 서버는 GET 요청을 수신합니다. 각 요청에는 다른 이미지를 호출하라는 index.html 요청과 같은 추가 파일에 대해 서버에 반복 호출이 많이 발생할 수 있습니다. 그런 다음 서버는 요청을 CGI (공통 게이트웨이 인터페이스)로 보냅니다. CGI를 사용하는 목표는 HTML 양식에서 데이터 (입력)를 가져 오는 백엔드 응용 프로그램을 추가하여 양식과 같은 동적 웹 상호 작용을위한 것입니다. 다른 유형의 요청은 게시물입니다. 클라이언트가 데이터를 서버로 전송하는 시점입니다. 우리는 각각의 예를 제공 할 것입니다.
게시 예 : "http : // localhost : 8080/form.htm"으로 이동하면 게시물을 서버로 보낼 수 있습니다. 양식은 사후 요청으로 실행 파일 CGI 웹 서버에 의해 전송되고 처리됩니다. 이 예제 양식은 두 단어 입력을 취하고 양식과 데이터를 CGI로 보냅니다. CGI는 양식과 내용 (문자열이 연결된 문자열)을 다시 보냅니다. 이것은 CGI가 사후 요청을 처리하는 방법의 예입니다.
예를 들어보세요 : 클라이언트가 서버에서 파일을 가져 오려고 할 때입니다. 특히 <색인.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 파일이 발견되지 않습니다. 오류가 발생하지 않습니다.