CGI スクリプトの実行結果(出力)の1行目は、以下の形式がよく使用されます。ヘッダ情報が完了した次の行)は必ず空白行にしてください。これを怠ると、ヘッダ行が完了したとみなされず、CGI スクリプトは動作しません。
最もよく使われる形式です。TypeName には MIME タイプと呼ばれる名前を指定します。MIME タイプには次のようなものがあります。
指定したURLにジャンプします。URLを http:// または https:// ではじまる完全URLで指定してください。
#!/usr/local/bin/perl print "Location: http://xxx.yyy.zzz/\n"; print "\n";
ブラウザに状態コードを返します。これは、HTTP ヘッダではなく、HTTP のステータスコードとして返却されます。
CGI スクリプトにパラメータを渡すには以下のような方法があります。それぞれの方法で引き渡したパラメータを Perl で記述した CGI で参照する方法は、CGIスクリプトのテンプレート を参照してください。
◆ コマンドライン引数で渡す
以下のような形式で CGI スクリプトを呼び出すことにより渡します。引数1、引数2が CGI スクリプトのコマンドライン引数になります。Perl の場合、これらの引数は配列 @ARGV や、環境変数 QUERY_STRING から読み出します。サーバーによっては、環境変数 @ARGV は参照できない場合もあります。
http://...../cgi-bin/xxx.cgi?引数1+引数2
引数に日本語や特殊記号を用いる場合は、適切なエンコードを行う必要があります。エンコード方式は、呼び出し側と CGI 側で整合がとれていれば %nn 形式でも BASE64 形式でもなんでも構いません。
ダブルクォート(")や感嘆符(!)など、引数に、UNIX のシェルで意味を持つ記号が含まれていると、\" や \! のように、バックスラッシュ(\)でエスケープされてしまうことがありますので注意してください。
◆ METHOD=GETで渡す
次のような形式でCGIスクリプトに渡します。CGIスクリプトは、これを環境変数の QUERY_STRING から読み出します。
http://...../cgi-bin/xxx.cgi?名前1=値1&名前2=値2
フォームから METHOD=GET で呼び出した場合も、この形式でデータが渡されます。この場合、記号などは %nn 形式に適切にエンコードされます。
環境変数のサイズには上限があるので、大きなデータを転送する時は METHOD=POST を用います。
◆ URLにスラッシュ(/)をつけて渡す
以下のような形式で CGI スクリプトを呼び出すこともできます。/引数1/引数2 の部分を環境変数 PATH_INFO で読み取ります。
http://...../cgi-bin/xxx.cgi/引数1/引数2
◆ METHOD=POSTで渡す
フォームから METHOD=POST で呼び出した場合は、データはURLではなく、標準入出力で渡されます。CGIスクリプトは、これを環境変数の CONTENT_LENGTH 分、標準入力(STDIN)から読み出します。
http://...../cgi-bin/xxx.cgi
CGIスクリプトに渡すデータは、次のような規則にしたがってエンコード(符号化)しなくてはなりません。(フォームの場合はブラウザが自動的にエンコードしてくれます。)これを怠ると、~ が \~ に変換されてしまったり、日本語が化けてしまったりします。
CGIスクリプトの中では、これを適切な手段でデコードしてやらなくてはなりません。例えば、perlによるCGIスクリプトでは、次のようなコードでデータをデコードします。
$value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
CGIスクリプトの中では次の環境変数を使用することができます。(ABC順)
変数名 | 意味 |
---|---|
AUTH_TYPE | 認証方式(例えば MD5, Basicなど) |
CONTENT_LENGTH | 標準入力から読み込み可能なデータのバイト数(METHOD=POSTの時) |
CONTENT_TYPE | クライアントから送られてきたデータのタイプ。フォームからMETHOD=POSTで送信した場合は、application/ |
GATEWAY_INTERFACE | ゲートウェイプロトコル名称(例えばCGI/1.1) |
HTTP_ACCEPT | ブラウザがサポートする Content-type: のリスト。すべてを許可する場合、*/* となる。 |
HTTP_FORWARDED | この要求をフォワードしたプロキシサーバーの情報。送信されない場合もある。 |
HTTP_REFERER | そのCGIを呼び出したページのURL。送信されない場合や、たまに、全く別のURLを差していることもある。 |
HTTP_USER_AGENT | ブラウザに関する情報(Mozilla/4.01 [ja] (Win95; I) など) |
HTTP_X_FORWARDED_FOR | この要求をフォワードしたプロキシサーバーのIPアドレス。 |
PATH_INFO | パス情報。たとえば、「cgi-bin/xxx.cgi/taro/xxx.htm」というURLでCGIスクリプトを呼び出した場合、PATH_INFOには「/taro/xxx.htm」が格納される。 |
PATH_TRANSLATED | PATH_INFOで指定したファイルの、サーバー上の絶対パス名。 |
QUERY_STRING | 「http://サーバー名/CGIスクリプト名?データ」というURLを要求した場合のデータ部分。 |
REMOTE_ADDR | クライアントのIPアドレス(例えば10.0.0.1) |
REMOTE_HOST | クライアントのホスト名(例えば abc32.abc.co.jp) |
REMOTE_IDENT | クライアント側のユーザーID |
REMOTE_USER | クライアント側のユーザー名 |
REQUEST_METHOD | METHODで指定したデータ取得手段。GET, POST, HEAD, PUT, DELETE, LINK, UNLINKなどの種類がある。 |
SCRIPT_NAME | CGIスクリプトの名前。 |
SERVER_NAME | サーバー名 |
SERVER_PORT | サーバーのポート番号(例えば80) |
SERVER_PROTOCOL | サーバーのプロトコル名(例えばHTTP/1.0) |
SERVER_SOFTWARE | サーバーのソフトウェア名(例えば NCSA/1.3) |