前へ << CGI プログラムのはじめの一歩 | ヘッダ >> 次へ |
先に説明したように、CGI プログラムへのデータ渡し方は GET と POST の2種類あります。
- GET
http://X68000.q-e-d.net/~68user/hoge/fuga.cgi のような URL の後に ? を付け、 続けて渡したいデータを書きます。CGI プログラム側からは、環境変数 QUERY_STRING を参照することで、渡されたデータを参照できます。例えば、http://X68000.q-e-d.net/~68user/hoge/fuga.cgi?foo とすると、環境変数 QUERY_STRING は `foo' となります。
GET ではデータの長さが制限されています。最大長は環境依存ですが、 WWW サーバに apache を使っている場合、最大長は 8000 バイト程度です。
http://X68000.q-e-d.net/~68user/hoge/fuga.cgi?foo のように、 URL という形に表せるので、サーチエンジンなどのような後から再利用できる CGI は、GET 方式で呼び出すべきです。
- POST
一般的に FORM からしか POST できません。<A HREF="foo/bar.cgi?hoge">というリンクでは GET になってしまうので、FORM 要素を使って<FORM ACTION="foo/bar.cgi" METHOD="POST"> </FORM>としなければ POST は実現できない、ということです。データ長さは無制限で、環境変数 CONTENT_LENGTH に長さが保存されています。
GET と違って、引数を URL の形で表現できないので、掲示板の書き込み時のように 再利用してほしくない場合は、POST を使うといいでしょう。
GET か POST を選ぶときは、リンクを張る HTML 部分に
<FORM ACTION="/~68user/hoge/fuga.cgi" METHOD=GET>のように、METHOD の部分に記述します。
メソッド (GET か POST か) を選択するのはブラウザ側であることに注意して下さい。 CGI プログラム側からは、環境変数 REQUEST_METHOD を見ることで GET で呼ばれたか POST で呼ばれたかを判断できます。
(ある意味) GET と POST を両方指定することもできなくはありません。<FORM METHOD=POST ACTION="foo.cgi?hoge=fuga"> </FORM>というように、METHOD を POST にしつつ、ACTION で指定した CGI プログラムに 「?hoge=fuga」という文字列を渡すことができます。この場合は REQUEST_METHOD は POST になりますが、 QUERY_STRING には `hoge=fuga' という文字列がセットされています。
前へ << CGI プログラムのはじめの一歩 | ヘッダ >> 次へ |