該實驗室的主要目標是基於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文件錯誤。