[トップページ] [戻る]
CGI (Common Gateway Interface)

CGI
クライアントからの要求で、WWWサーバーで処理を行い、結果を返す仕組みを総称してCGIと呼びます。
CGIの仕組み

ブラウザ

URL →

← HTML

WWWサーバー

起動 →

← 結果

CGIプログラム


CGIでは、ブラウザから指定されたCGIプログラムをWWWサーバーが起動し、結果を再びWWWサーバーを介してブラウザへ渡します。WWWサーバーは通常、環境変数を通してCGIプログラムにデータを渡します。
CGIスクリプトの指定
CGIスクリプトとして使用するプログラムは主にPerl, シェルなどがあります。スクリプトがCGIとして実行されるには、出力の先頭に Content-type 指定が必要になります。
HTML	Content-type: text/html
GIF	Content-type: image/gif
CGIスクリプトのデータ受け取り
HTMLからのデータをCGIへ渡すとき、<FORM>を使用します。
<FORM METHOD="POST" ACTION="./cgi-bin/scripts.cgi">
METHODアトリビュートはデータの送受信方法で、GETまたは何も指定されなかった場合は、環境変数 QUERY_STRING を介してデータの受け渡しを行うことができます。
if ($ENV{'REQUEST_METHOD'} ne "POST") {
	$Data = $ENV{'QUERY_STRING'};
}

METHODアトリビュートにPOSTが指定された場合、標準入力でデータが渡されます。環境変数 CONTENT_LENGTH にはデータの長さが入っているので、この長さ分だけ標準入力から読み取るようにします。
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	read(STDIN, $Data, $ENV{'CONTENT_LENGTH'});	# STDIN は標準入力
}
CGIの環境変数
環境変数はWWWサーバーで自動的にセットされます。ですが、すべてのWWWサーバーで共通ではありません。

CONTENT_TYPEデータの種類
CONTENT_LENGTHPOSTメソッド時のデータの長さ
DOCUMENT_ROOTサーバー文書のルートディレクトリ
GATEWAY_INTERFACECGIのバージョン
HTTP_ACCEPTブラウザが許可しているContent-type
HTTP_REFERER直前に参照していたURL
HTTP_USER_AGENTブラウザのバージョン
PATH_INFO外部パス情報
QUERY_STRINGGETメソッド時のデータ
REMOTE_ADDRクライアントのIPアドレス
REMOTE_HOSTクライアントホスト名
REMOTE_USERクライアントユーザー名
REQUEST_METHODクライアントの要求メソッド
CGIは危険
CGIは危険性を秘めています。例えば掲示板などのスクリプトで、HTMLタグを有効にしておく場合、
</HTML>
などと行われると、掲示板のHTMLタグが終了してしまい、満足な結果が得られなくなります。イメージなどでも、巨大なサイズのイメージを貼り付けられると、読み込みに大変な時間がかかってしまいます。

このため、掲示板などではHTMLタグを無効にしておく方が安全性が高いといえます。

[トップページ] [戻る]
Copyright (C) 2000 Me All rights reserved
Mail To webmaster