该实验室的主要目标是基于RFC/1945创建CGI HTTP Web服务器。该服务器是建立在C插座编程和抽象迄今为止在INET 4021-网络编程中学到的。
此外,服务器在速度和资源分配方面应有效。
我们的服务器使用CGI作为抽象来从HTML表单中获取输入,然后返回输出。客户不知道CGI在那里,但是当它收到回应时,它很高兴,无论它来自谁。
至于我们的算法,服务器输入输入,然后解析它以查找是否是发布/获取请求,然后将数据发送到CGI进行处理。
/cgi -bin-其中包含用于处理发布和获取请求的CGI文件(可执行Web服务器所在的位置)。
当客户端将帖子/获取请求发送到服务器时,服务器将调用CGI可执行文件以处理请求。这样做的主要用途是允许可执行人员处理工作,而服务器只是将其传递给它,然后可以处理新的请求。这是对资源分配的良好利用,并有助于同时支持更多用户。
/conf-配置文件夹包含httpd.conf文件,该文件是服务器的配置文件。它说明并发用户的数量,根内容位置,索引位置和要运行的端口。
/内容 -所有.html,.gif,.jpg(内容)都位于此文件夹中。当收到index.html时,它将发送所有这些文件的请求。这些文件用于制作客户端浏览器上显示的网页。
/logs-此文件夹包含所有访问命令的日志文件以及错误。标准输出将转到访问日志,所有其他错误日志都转到错误日志。
/src-这是我们所有源代码所在的地方。从本质上讲,这是服务器所在的文件夹。
index.html-网络服务器目录索引
要编译CGI的GET和POST,请更改为/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
现在,使用Web浏览器,输入“ http:// localhost:8080/”。这将加载index.html文件并显示网页。此外,您可以通过“ http:// localhost:8080/filename”加载某些文件。如果文件存在,将显示该文件(如下所示)。否则,将会有一个Error 404 - File Not Found消息。

在开始之前,重要的是要注意,当服务器向Web浏览器客户端发送消息时,它是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表单中获取数据(输入)的后端应用程序来进行动态Web交互。另一种请求是帖子。这是客户将数据发送到服务器的时候。我们将提供每个例子。
帖子示例:如果您转到“ http:// localhost:8080/form.htm”,则可以将发布消息发送到服务器。该表格将作为邮政请求发送并由可执行的CGI Web服务器发送并处理。我们的示例表格采用两个单词输入,将表单和数据发送到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处理请求的方式。
假设客户端是用户,并且管理员是服务器...
管理员 - 该项目的Admins目的是查看如何处理帖子并在可执行网络服务器中获取请求。编程服务器还有助于了解如何发送HTTP标头并与网页进行通信,并浏览文件并将其发送到网页。
用户 - 此项目的目的是学习如何导航网页以及收到某些错误含义。例如,如果试图从服务器上加载不存在的文件,则将找不到404文件错误。