第4章 HTTP環境変数と取得


  1. HTTP(Hyper Text Transfer Protocol)環境変数とは

    HTTP環境変数とは
    ユーザがWebサーバからページを取得する際に送信されるもので,ブラウザの種類やリンク元の情報などが含まれている変数です。

    例えば,アクセスしてきたユーザのIPアドレスやブラウザの名前などが含まれます。

    HTTP環境変数の主な種類
    以下の表に主な環境変数の名前とその概要を載せます。
    環境変数名 概要の説明
    HTTP_USER_AGENT ブラウザやOSの情報 Mozilla/4.0
    HTTP_REFERER 直前に見ていたページのアドレス http://alice/
    REMOTE_ADDR クライアントのIPアドレス 192.168.0.5
    REMOTE_HOST クライアントのホスト名。ホスト名を持たない場合はIPアドレス xxxxxxx.docomo.ne.jp
    REQUEST_METHOD GET,POST,PUTなどのリクエスト形式 GET
    QUERY_STRING GET 形式のリクエストで,送られてくるデータ 実際にこの後で試してみましょう。
    CONTENT_LENGTH POST 形式のリクエストで,標準入力から送られてくるデータのバイト数 128
    ここからはサーバ側の環境変数
    SERVER_SIGNATURE WWW サーバの署名 Apache/2.x.xx Server at www.hs.cuc.ac.jp Port 80
    SERVER_NAME WWW サーバのホスト名 www.hs.cuc.ac.jp
    SERVER_ADDR WWW サーバの IP アドレス 202.xxx.xxxx.xxx

  2. PerlによるHTTP環境変数の取得

    HTTP環境変数と連想配列変数
    Perlでは,HTTP環境変数をENV(ENVironment:環境の意)という名前の連想配列変数に格納します。

    連想配列変数とは,データを連するキーワードをインデックスにする高級変数のことを言います。
    例えば,41で紹介したREMOTE_ADDR変数などの内容は,ENVという連想配列変数に次のようなイメージで格納されています。
    HTTP_USER_AGENT HTTP_REFERER REMOTE_ADDR REQUEST_METHOD
    Mozilla/4.0 http://www.hs.cuc.ac.jp/ 192.168.0.2 POST

    連想配列変数は,"%変数名" と定義します。この場合,@ENV ということになります。

    連想配列変数の参照方法
    今回の @ENV の場合,例えばREMOTE_ADDRのデータをPerlで参照するには,
      $ENV{'REMOTE_ADDR'}
    とします。この結果をprintで出力すれば,192.168.0.2 の値が得られます。
    実際に,前章で作成した mkhtml.cgi を改良して,ユーザーのIPアドレスを取得してみましょう。
    xyzzyを起動し,【Web_local(L:)】→【cgi-bin】内のmkhtml.cgiを開く。

    次の赤字のように内容を変更する。
    #!/usr/bin/perl

    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head><title>getIP</title></head>\n";
    print "<body>\n";
    print "投稿ありがとう<p>\n";
    print "あなたのIPアドレスは,$ENV{'REMOTE_ADDR'}になります。\n";
    print "</body>\n";
    print "</html>";

    exit 0;

    【名前を付けて保存】から, getIP.cgi という名前で保存する。

    その後,つぎのように属性の変更を忘れない。
    【マイコンピュータ】→【Web_local(L:)】→【cgi-bin】内のgetIP.cgiで右クリック。

    【プロパティ】→【セキュリティ】で【Everyoneに読み取り実行権限】を許可する。

    インターネットエクスプローラで確認すると,下のようにアクセスしたクライアントのIPアドレスが現れる。