CGI プログラムには謎を感じる読者もいるかもしれません。このセクションでは、CGI プログラムの基本的なプログラミング プロセスについて説明します。 読み終えたら、もう謎はなくなります。
3. CGI 仕様に関するその他の問題:
CGI プログラムには謎を感じる読者もいるかもしれません。このセクションでは、CGI プログラムの基本的なプログラミング プロセスについて説明します。 読み終えたら、もう謎はなくなります。
まず、プログラミング作業を行うときは、大きなタスクを多数の小さなタスクに分割し、それぞれの小さなタスクが比較的独立した機能を完了します。 CGI プログラミングは難しいと考えているため、CGI プログラムを自分で書くことに抵抗がある人はたくさんいます。 実際、一般的な CGI プログラムを次の部分に分割し、1 つずつ解決していけば、CGI プログラムは難しくありません。
一般に、ブラウザで CGI プログラムを呼び出す場合、サーバーはまず CGI プログラムを見つける必要があります。通常、CGI プログラムは、サーバーによって指定されたディレクトリ (cgi-bin および cgi-win) に配置されます。ディレクトリによって指定される実際のディレクトリは、それぞれ c:httpdcgi-bin ディレクトリと c:httpdcgi-win ディレクトリです。 OmniHTTPD で実際のディレクトリを変更することも、次のように仮想ディレクトリを追加することもできます。 c:my-cgi ディレクトリ プログラムに test1.cgi という名前の CGI がある場合は、仮想ディレクトリ cgi-test を c:my-cgi として指定します。 、ブラウザのアドレス http://localhost/cgi-test/test1.cgi で呼び出すことができます。
通常、サーバはブラウザから要求されたCGIプログラムを見つけて、そのCGIプログラムのプロセスを生成する。 このようにして、ブラウザとサーバーは接続を確立しました。 CGI プログラムの実行が完了すると、プロセスは消滅し、接続が失われます。 上図のすべての操作は、接続が確立されている時間内に完了するため、各 CGI プログラムによって実行されるタスクはできるだけ小さくする必要があります。そうしないと、サーバーとサーバー上で多くの時間とリソースが消費されてしまいます。クライアントブラウザの待ち時間も非常に長くなります。
上の図からわかるように、CGI プログラムは通常、データ入力、データ処理、データ出力の 3 つの部分に分かれています。場合によっては、データ処理部分でデータベースと対話する必要があります (これは CGI の専門分野でもあります)。プログラム)。 この 3 つの部分のうち、データ入力とデータ出力は厳密な仕様があり、データ処理は想像力を発揮できる部分です。 次に、データ入力とデータ出力の仕様と注意事項に焦点を当てます。
以前、CGI プログラムで使用されるほぼすべての環境変数をリストしました。 その中でもかなりの部分がデータの入出力と密接に関係しています。 以下に、最も一般的に使用される環境変数をカテゴリ別にリストします。
サーバー関連の環境変数:
ゲートウェイ_インターフェース
SERVER_NAME
サーバー_ポート
サーバー_プロトコル
サーバー_ソフトウェア
クライアント関連の環境変数:
HTTP_ACCEPT
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_AUTHORIZATION
HTTP_CHARGE_TO
HTTP_FROM
HTTP_IF_MODIFIED_SINCE
HTTP_PRAGMA
HTTP_REFERER
HTTP_USER_AGENT
リクエスト関連の環境変数:
AUTH_TYPE
コンテンツファイル
CONTENT_LENGTH
コンテンツタイプ
出力_ファイル
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_USER
REQUEST_LINE
REQUEST_METHOD
SCRipT_NAME
ここで CONTENT_FILE と OUTPUT_FILE について言及する価値があります。 Windows 3.1 および DOS では、標準入出力 (STDIN および STDOUT) 経由で読み書きできる言語は多くないため、代わりにこれら 2 つの変数が使用されます。 他の環境変数については、前の詳細なリストを参照してください。
前述したように、GET メソッドは URL を介してデータを渡します。POST メソッドは STDIN を介してデータを渡します。 どの方法を使用する場合でも、データはデータ送信中にエンコードされます。 ただし、エンコードとデコードについて心配する必要はありません。使用する開発言語 (Perl の cgi-lib.pl、Delphi の TWebModule など) によってこのタスクが自動的に完了します。
CGI プログラミングではヘッダー情報も非常に重要です。 ヘッダ情報は、クライアントに情報を送信する前の CGI プログラムからの信号です。 ヘッダー情報には主に 3 つのタイプがあります。
Content-type //HTMLをブラウザに送信
Location //新しい URL をブラウザに渡します
ステータス //通常、CGI プログラムエラーが発生したときにエラーを確認するために使用されます
Content-type はブラウザによって処理される情報のタイプであり、主に MIME タイプです。 メソッドは、タイプとサブタイプの組み合わせとして定義されます。 一般的に使用される MIME タイプは、テキスト、マルチパート、メッセージ、アプリケーション、画像、オーディオ、ビデオです。
たとえば、CGI プログラムは HTML ドキュメントをブラウザに送信する前に、まず text/html を送信する必要があります。 Perl で書くと次のようになります。
print "コンテンツタイプ:text/html "
print "< h1> 皆さん、こんにちは! < /h1> "
場所により、ブラウザは新しい URL にリダイレクトされます。 例えば:
print "場所:http://www.chinabyte.com"
この Perl プログラムはブラウザを ChinaByte のホームページにリダイレクトします。
ステータスは CGI プログラムのステータスを示し、通常、CGI プログラムが失敗したときにエラーをチェックするために使用されます。 次の表に、一般的に使用されるステータス コードとその意味を示します。
コード結果の説明
200 OK リクエストは正常に満たされます
202 Accept リクエストは受け入れられ、処理中です。
301 Moved ドキュメントは新しい場所に移動されました
302 Found ドキュメントは説明ではなく、サーバー上の別の場所にあります。
400 Bad Request HTTP リクエストの構文が正しくありません。
401 不正なドキュメントにはアクセス権が必要です
403 Forbindden サーバーはドキュメントへのアクセスを拒否します
404 No Found サーバーはドキュメントを見つけることができません。
500 サーバーエラー サーバーで重大なエラーが発生しました
502 サービスが過負荷です サーバーがビジー状態のため、リクエストを処理できません。
これで終わります。 CGI に関するこれらの基本知識を習得したら、任意の言語を使用して CGI プログラムの開発を段階的に開始できます。 もう一度言いますが、CGI プログラムは神秘的なものではなく、サーバーと何らかのタスクを作成するための単なる対話です。