- ベストアンサー
CGIのパスに関する疑問とは?
- CGIのパスに関する疑問について、理由や実態、拡張子についての考えられる要点を解説します。
- http://・・・/cgi-bin/app.cgi/form/contact?contact=01というパスの意味と理由について詳しく知りたいです。
- お問い合わせフォームのCGIにおけるパスについての疑問を解決するために、パスの構成要素や可能性について考察します。
- みんなの回答 (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://okwave.jp/qa/q8588097.html であっても、8588097.htmlというファイルは実在しません。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
多分、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だ!って感じの 使い方は、割と多く使うと思いますよ。
お礼
ありがとうございました。 PATH_INFOははじめて聞いたので調べてみようと思います。 要するにセキュリティのため、ということですね。
お礼
詳細にご説明いただきましてありがとうございました。 大変わかりやすい説明でした。