このラボの主な目標は、RFC/1945に基づいてCGI HTTP Webサーバーを作成することです。サーバーは、Cocketプログラミングと抽象化の上に構築されており、これまでにINET 4021-ネットワークプログラミングで学んだ。
さらに、サーバーは、スピードとリソースの割り当てに関して効率的である必要があります。
サーバーは抽象化としてCGIを使用して、HTMLフォームから入力を取得し、出力を返します。クライアントは、CGIがそこにいるとは思いもしませんが、誰からでも応答を受け取ったときに幸せです。
アルゴリズムについては、サーバーが入力を取り入れてから、それが投稿/Get要求のかどうかを見つけるためにそれを解析し、処理のためにデータをCGIに送信します。
/CGI -BIN-これには、投稿と取得のリクエストを処理するために使用されるCGIファイルが含まれています(実行可能なWebサーバーが存在する場所)。
クライアントがサーバーに投稿/GETリクエストを送信すると、サーバーはCGI実行可能ファイルを呼び出してリクエストを処理します。これの主な用途は、実行可能ファイルが作業を処理できるようにすることです。また、サーバーはそれを通過してから新しいリクエストを処理できるようにすることです。これはリソースの割り当ての適切な使用であり、より多くのユーザーを同時にサポートするのに役立ちます。
/conf-構成フォルダーには、サーバーの構成ファイルであるhttpd.confファイルが含まれています。並行しているユーザーの量、ルートコンテンツの場所、インデックスの場所、および実行するポートの量を記載しています。
/contents -すべての.html、.gif、.jpg(内容)はこのフォルダーに存在します。 index.htmlが受信されると、これらすべてのファイルのリクエストが送信されます。これらのファイルは、クライアントのブラウザに表示されるWebページを作成するために使用されます。
/logs -このフォルダーには、すべてのアクセスコマンドとエラーのログファイルが含まれています。標準はアクセスログに移動し、他のすべてのエラーログはエラーログに移動します。
/SRC-これは、ソースコードのすべてが存在する場所です。これは基本的に、サーバーが配置されているフォルダーです。
index.html -webserverディレクトリインデックス
GETをコンパイルして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
ここで、Webブラウザーを使用して、「http:// localhost:8080/」を入力します。これにより、 index.htmlファイルがロードされ、Webページが表示されます。さらに、「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クライアントのエラーが送信されます。他のフォームは、「404が見つかりません」ではなく、「200 OK」、「500内部サーバーエラー」、「501は実装されていない」を使用しますが、そうでなければ同じフォームを保持します。送信するコンテンツに基づいて2行目を編集します。その後、2つの新しい行の後にデータを送信できます。
クライアントがファイルを要求すると、サーバーはgetリクエストを受信します。各リクエストには、他の画像を呼び出すためのindex.html要求など、追加ファイルに対してサーバーへの多くの反復呼び出しがある場合があります。次に、サーバーはリクエストをCGI(Common Gatewayインターフェイス)に送信します。 CGIを使用する目標は、HTMLフォームからデータ(入力)を取得するバックエンドアプリケーションを追加することにより、フォームなどの動的なWebインタラクションを使用することです。別のタイプのリクエストは投稿です。これは、クライアントがサーバーにデータを送信するときです。それぞれの例を提供します。
投稿例: 「http:// localhost:8080/form.htm」にアクセスすると、サーバーに投稿メッセージを送信できます。フォームは、POSTリクエストとして実行可能なCGI Webサーバーに送信され、処理されます。私たちの例フォームは、2つの単語入力を取り入れ、フォームとデータを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がリクエストを取得する方法です。
クライアントがユーザーであり、管理者がサーバーであると仮定します...
管理者 - 管理者のためのこのプロジェクトの目的は、実行可能なWebサーバーで投稿を処理してリクエストを取得する方法を確認することです。サーバーのプログラミングは、HTTPヘッダーを送信してWebページと通信する方法を理解したり、ファイルをブラウジングしたり、Webページに送信したりする方法を理解するのにも役立ちます。
ユーザー - ユーザー向けのこのプロジェクトの目的は、Webページをナビゲートする方法と、受信したときに特定のエラーが何を意味するかを学ぶことです。たとえば、存在しないサーバーからファイルをロードしようとすると、エラーが見つからない404ファイルがあります。