□Perl 講座 初級編 > POSTとGET

◆フォームからのデータの受取

CGIを用いる理由はもちろんインタラクティブ(相互作用する)なHPを実現させるためです。CGIの起動方法については前に述べましたが、クライアントのブラウザからデータをサーバ上に送る方法としても、同様のことが言えます。大まかに言ってしまうと、フォームを使ってPOST方式(GETでも可)でデータを送るか、URLの後ろに?***=***&***=***のようにつけてGET方式で送るかの2通りになります。これらの2つの違いを説明します。

また、インターネットエクスプローラー4.0以降・ネットスケープ2.0以降の場合<FORM>タグないでENCTYPEのパラメータを[multipart/formdata]と言うエンコード方式がサポートされています。これを使うとURLエンコードしないで、フォームの内容を送信・メールが出来たり、ファイルをサーバに送信したり出来るようになります。



◆POST

<FORM>タグでmethodパラメータにPOSTがセットされた場合に適応されます。POSTの時は標準入力経由でデータがCGIスクリプトに渡されます。この時環境変数CONTENT_LENGTHには、セットされたデータの長さが入っており、その長さ分だけが標準入力からデータを読み取ります。

見た目で一番違うところは、ブラウザのURL入力欄の.cgiの後に何もつかないでデータをやり取りされて、データの破損もないって所でしょう!!



◆GET

methodパラメータでGETをセットするか、記述しなかった場合に適応されます。URLエンコードされたデータは環境変数QUERRY_STRINGにセットされますが、環境変数に格納できる大きさがサーバ上で限定されている場合があります。この場合大量のデータを送る際にデータの一部が失われる可能性がありますので、一般的にはPOSTを使った方が良いと言われてます。(但しPOSTが使えないプロバイダも中にはあります。)

またGETでデータを送る際、送信データ内にスペースが含まれる場合インターネットエクスプローラーでは問題ないのですが、ネットスケープではスペース以降のデータが失われてしまうケースがあります。スペースはURLエンコードされると%20で表せますので、このようなデータを送受信させたい場合は一旦スペースを%20に変換してから送信させてください。

□初級編 プログラミングに入る前に