dポイントプレゼントキャンペーン実施中!

http://・・・/cgi-bin/app.cgi/form/contact?contact=01
というページがありまして、お問い合わせフォームです。
/cgi-bin/form/contact/app.cgi?contact=01
だとわかるんですが、上記のようにしている理由はどのような理由が考えられるでしょうか。
CGIにcontactって変数を渡してるんだなってのはわかるのですが、(想像になってしまうとは思うのですが)実態はapp.cgiなのでしょうか。
app.cgiが実態っぽいという場合は、/form/contactは何のためにあるのでしょうか。
contactが実態っぽいという場合は、単に拡張子を消しているだけでしょうか。

A 回答 (2件)

本当に基本的な事ですが・・


HTTPプロトコルでの通信は

GET /cgi-bin/form/contact/app.cgi?contact=01
以下省略

とGETで、サーバーに要求します。(POSTなどもある)
※#以下はブラウザ側に必要な情報なのでサーバーには送られません。

1) サーバーは、その要求・・に、?があればそれ以下の文字列をQUERY_STRINGという環境変数に格納します。CGIはそれを利用できます。$ENV{'QUERY_STRING'}ですね。
2) ついで、指定されたパスに従って
 /
 |-- cgi-bin/
    |-- form/
       |-- contact/
          |-- app.cgi
 というファイルを探します。
※ここからがWindowsと大きく異なる部分
 app.cgiがファイルだったら、それを提供します。
 app.cgiが実行ファイルでしたら、実行権限があれば実行します。
  実行するプログラムはファイルの最初に書いてあるか、サーバーの指定
  すべて、サーバー側の設定です。Windowsのように拡張子もレジストリは使わない。
 app.cgiがディレクトリでしたら、それを開いてみる。
  ・内部にDIRECTRY_INDEXで指定されたファイルがあるとそれを提供、
   または上記の通り実行する。
  ・なければ、NOT FOUNDを返す。
 app.cgiがなければ、/appcgiは環境変数PATH_INFOに格納して上位のcontactを調べる。

 これを/cgi-binまで繰り返します。
  極めて単純な文字通り機械的処理で/ルートまで進みます。

>app.cgiが実態っぽいという場合は、/form/contactは何のためにあるのでしょうか。
 どれが実体であるかは、ユーザーにはわかりませんし、知る必要もないです。
 たぶん、ディレクトリ(Windowsではフォルダー)を示しているものだと思われます。

 ひょっとして実体は/cgi-bin/form/contact、/cgi-bin/form、あるいは/cgi-binかもわかりませんし、/cgi-bin/form/contact/index.cgi、/cgi-bin/form/index.cgi、あるいは/cgi-bin/index.cgi、はたまた/cgi-bin/abc.php かも知れません。

>contactが実態っぽいという場合は、単に拡張子を消しているだけでしょうか。
 拡張子はWindows以外のOSでは一切関係ありません。contactが実行ファイルかもしれませんし、それはディレクトリかもしれません。

 このページのURLが
http://oshiete.goo.ne.jp/qa/8588097.html
 であっても、8588097.htmlというファイルは実在しません。
    • good
    • 0
この回答へのお礼

詳細にご説明いただきましてありがとうございました。
大変わかりやすい説明でした。

お礼日時:2014/05/10 20:43

多分、PATH_INFOです。



app.cgiの
PATH_INFO="/form/contact?contact=01"
と変数に格納された状態で起動するので、
たとえば、サーバー内部にもう一つ外から見えないCGIがあったとき、
app.cgiを踏み台としてあがるのにも使えます。
が、これをやるときは、app.cgi の cgiは省略できるようにする人が多いと思いますけどね。
出来ることを紹介しただけなので、このCGIがなぜこれをやったか?は
もちろん、第3者にはわかりませんが。

http://・・・/cgi-bin/app/form/contact?contact=01
このアドレスで、実は「app」はパスではなく、CGIだ!って感じの
使い方は、割と多く使うと思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。
PATH_INFOははじめて聞いたので調べてみようと思います。
要するにセキュリティのため、ということですね。

お礼日時:2014/05/10 20:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!