次にCGIスクリプトは最初の出力行に次の三つのうちのいずれかの特別なヘッ ダを含んでいます。
Content-type ヘッダはブラウザにHTMLファイルやGIFイメージ等を送る場合に 使われます。Content-type はブラウザに入力の処理をどのように行なうかを 知らせるためのものです。例えばHTMLファイルを返す場合、
Content-type: text/htmlとし、GIFイメージを返す場合、
Content-type: image/gifとします。このように Content-type は全てMIME形式で定義されています。
一般には次のContent-typeが使われます。
フォーマット | Content-type |
---|---|
HTML | text/html |
Text | text/plain |
GIF | image/gif |
JPEG | image/jpeg |
PostScript | application/postscript |
MPEG | video/mpeg |
Location: http://www.ntt.jp/index.html Location: http://www.w3.org/ Location: /~yamada/profile/index.html例えば、
#!/bin/sh echo Location: http://www.ntt.jp/ echoのようなCGIスクリプトを作っておけば、このCGIスクリプトを実行すると自動 的に、Locationに記述されたURL (NTTのWWWサーバ)に移動します(Location Demo)。これは、以下のアンカータグと同じ機 能を果たしますが、クライアント側で、どこに移動するかがわからない点に特 徴があります。
<A HREF="http://www.ntt.jp/">NTT WWWサーバへ</A>例えば、10個のHTMLファイルをランダムに表示させたい場合、次のようなCGI スクリプト(Perl で記述)を作ればよい事がわかります (占いデモ)。
#!/usr/bin/perl $unsei=10; srand(time); $number = int(rand($unsei)); print "Location: /technotes/HTML/uranai/unsei$number.html\n\n";
また、直前の書類へ戻るためのスクリプトも簡単に書く事もできます。CGIス クリプトで利用できる環境変数 HTTP_REFERER は、直前のページのURLを示す ものです(ただし、ブラウザによっては送出しないものがあります)から、以下 のようなスクリプトとなります。
#!/bin/sh echo Location: $HTTP_REFERER echo
最後の Statusヘッダはブラウザに特別な状態コードを返す場合に用いられま す。状態コードはHTTPの仕様で定義されています。例えば、ヘッダ
Status: 204 No Responseの意味は、サーバから何も応答がなかったという事を意味します。
次に、CGIスクリプトを呼ぶためのハイパーリンクを記述します。
<A HREF="/cgi-bin">Who login?</A>これでCGIスクリプトを実行するポインタができました。
では、CGIスクリプトを作って見ます。最初の段階として、Content-type (HTML) のヘッダを出力します。
#!/bin/sh echo "Content-type: text/html" echo
ここで重要なことはヘッダの後に空行を忘れないことです!
その次にHTMLファイルの始まりを記述します。
echo "<HTML><HEAD>" echo "<TITLE>Who is Login?</TITLE>" echo "</HEAD><BODY>"
そして、本来の趣旨である whologinの本体 whoコマンドを 記述します。しかし、HTML が改行等を明示的に記述しなければならないので、 正しいフォーマットで表示されません。そのため、whoコマンドを整 形タグ(<PRE>)で囲みます。
echo "<PRE>" who echo "</PRE>"
最後にHTMLタグの終了タグで閉じます。
echo "</BODY></HTML>"
これで完成です。このスクリプトを chmod コマンドを使って、実行ファ イルにして、CGIスクリプトの置いてある場所にコピーします。
% chmod ugo+x whologin % cp whologin /usr/local/etc/httpd/cgi-bin/
<A HREF="/cgi-bin/script?arg1+arg2+arg3+...+argn">と表します。サーバがスクリプト要求を受け取った時、arg1、arg2、arg3、...、 argn の引数をスクリプトに渡します。