CGIの仕様

トップ > CGI入門 > CGIの仕様
目次
CGIスクリプトが書き出すヘッダ情報

CGIスクリプトの実行結果(出力)の1行目は、以下の形式がよく使用されます。

Content-type: TypeName

最もよく使われる形式です。TypeNameにはMIMEタイプと呼ばれる名前を指定します。MIMEタイプには次のようなものがあります。

  • text/html ... HTML文書
  • text/plain ... べた文書
  • image/gif ... GIFファイル
  • image/jpeg ... JPEGファイル
  • video/mpeg ... MPEGファイル

通常のテキストを表示する場合は、Microsoft Internet Explorer 3.0では、text/plain をうまく解釈できないことがありますので、text/htmlとしたほうが無難なようです。


Location: UrlName

指定したURLにジャンプします。URLを http:// ではじまる完全URLで指定してください。

    (例)
    #!/usr/local/bin/perl
    print "Location: http://xxx.yyy.zzz/\n";
    print "\n";

Status: StatusCode

ブラウザに状態コードを返します。詳細はHTTPの仕様書を参照してください。

出力の2行目(正確に言うと、ヘッダ情報が完了した次の行)は必ず空白行にしてください。これを怠ると、CGIスクリプトは動作しません。

CGIスクリプトへ渡すパラメータ

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スクリプトに渡すデータは、次のような規則にしたがってエンコード(符号化)しなくてはなりません。(フォームの場合はブラウザが自動的にエンコードしてくれます。)これを怠ると、~ が \~ に変換されてしまったり、日本語が化けてしまったりします。

CGIスクリプトの中では、これを適切な手段でデコードしてやらなくてはなりません。例えば、perlによるCGIスクリプトでは、次のようなコードでデータをデコードします。

$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
CGIスクリプトが参照可能な環境変数

CGIスクリプトの中では次の環境変数を使用することができます。(ABC順)

変数名意味
AUTH_TYPE 認証方式(例えば MD5, Basicなど)
CONTENT_LENGTH 標準入力から読み込み可能なデータのバイト数(METHOD=POSTの時)
CONTENT_TYPE クライアントから送られてきたデータのタイプ。フォームからMETHOD=POSTで送信した場合は、application/x--form-urlencoded となる。
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)

<< PAGE TOP >>

BACK UP 初心者でホームページを考えてられてる方へ

独自ネットショップや楽天ショップ・YAHOOショップ運営される初心者の方も、無料で、親切にアドバイスいたします。
SEO・月次更新・リニュアルetc

ホームページ制作の事なら

何でもお問合せください。
お問合せフォームはこちらから

ホームページ作成は京都のリュウム株式会社

京都市中京区橋弁慶町222番地
ヒライビル3階

TEL 075-257-4588
営業時間 AM10:00-PM7:00

ホームページ制作のことなら、格安で成功するSEO対策に強い京都のホームページ作成 リュウムへ

無料お見積はこちらから

TEL : 075-257-4588
京都市中京区橋弁慶町222番地 ヒライビル3階


無料お問合せはこちらから TEL 075-257-4588 営業時間 AM10:00〜PM7:00
| ホーム |
| 無料ホームページ作成講座 | ホームページ作成辞典|田中茂(代表取締役社長)経歴|



CSS
Ryuumu