CGIについて以下の質問を答えられる方教えてください。
1.何を目的として作られたか?
2.いつ開発されたのか?
3.いったいどういうものなのか?どういう仕組みで動いているのか?
4.はじめて登場してから現在にいたるまでの歴史は?
誰かこの答えがわかる人がいたら教えてください。全部わからなくてもいいので、一つでも知ってる人がいたら教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

1.目的はWebサーバとプログラムの連携です。


一番多い用途は動的なページの生成かもしれませんが、何しろ、この仕組みによって、一方的な情報配信の仕組みだったWWWがインタラクティブな物への変わりました。

2.時期については、正確にはわかりませんが、仕組みがRFCによって提唱されたのは、かなり昔では無いかと思います。

3.Webサーバとプログラムが情報のやり取りをする為のプログラミングインターフェースです。
よく、CGI=Perlと思ってらっしゃる方もいますが、CGIとは特定の言語等を表す言葉ではないんです。
正式名称は、Common Gateway Interfaceです。
どういう仕組みと言うほど複雑なものではありません。
先に書いたように、連携の為の言わばお約束です。
このルールにのっとってプログラムを書けば、ちゃんと情報をやり取りできるというようなものですね。
基本的には標準入出力を使って、情報をやり取りする事になっているため、標準入出力が扱えるプログラム言語であれば何でも使用できます。
世の中でPerlがCGIと混同される原因となった背景には、Perlは本体さえおいておけば、コンパイルの必要なくスクリプトが動かせるため、CGI用の言語としては非常に手軽に使用できたからです。
標準入出力はもちろん、テキストを扱う枠組みにも優れていて、Web上で扱うデータの大半はテキストである事から、CGI向けの言語として名前が売れる事になりました。

プロバイダがサーバ上で許可しているならば、Per以外にもいろいろ選択肢はあります。
ただし、C等のコンパイル言語を使うためには、そのサーバで動くバイナリを作らなければなりませんから、自分でサーバを持ってない限り中々難しいでしょう。

CGIはインターネット黎明期からある古い仕組みですから、今となってみるとパフォーマンス等に様々な問題を抱えています。
最近では、ASPやJSP、PHPといったサーバサイドスクプト系の仕組みもありますし、Javaサーブレットのような物もありますが、手軽さ・シンプルさという点では、まだまだCGIの出番はあるでしょうね。

4.については、詳細はよく知りませんので、上記の中で触れた程度で勘弁してください。

知見のある方、何か間違った説明があったらフォローお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます!!すっごく役に立ちます!!ありがとうございました!!

お礼日時:2002/03/15 23:58

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

このQ&Aと関連する良く見られている質問

Q昨日はじめてレンタルCGI設置に挑戦しました、で質問です

http://merlion.cool.ne.jp/cgi/
のサイトのスケジュール2というのをいただいてきたのですが、
背景を黒にしたところ、「12月」という文字も黒なので見えなくなってしまいました。
HP全体のイメージを統一したいので、どうにか方法はないかと、
CGIをメモ帳で開いてみたのですが、さっぱりチンプンカンプンです。
できるものかどうか、できるとしたらその方法を教えてくださいませ。

Aベストアンサー

再び参上です。

(1)sche7.cgiをメモ帳で開いてください。

(2)メモ帳の検索機能を使って「+2」という言葉を検索してください。このスクリプトには+2という記述は1ヵ所しかありませんので、迷うことはないと思います。

(3)ヒットした行を以下のように修正してください。

print "<font size=\"+2\"><b>$logmon月</b></font>\n";



print "<font size=\"+2\" color=\"#●●●●●●\"><b>$logmon月</b></font>\n";

●の部分でお好みの色を半角英数16進数で指定してください。白ならffffff。

(4)メモ帳で上書き保存し、再度アップロードしてください。


もしかしたら、この質問と回答は削除対象かも。
(作者に無断でソースを表示しているので)

Qx.htmlが呼ばれたらx.cgiを実行

するように(実行結果は表示させないでファイルに格納)
するにはx.htmlにどのようにx.cgiのパスを指定したらいいでしょうか?
<imag src="x.cgiのパス"/>
を置くとブラウザに「読み取りミス」画像が表示されます
何も表示させない場合にはどうしたらいいのでしょうか?

Aベストアンサー

<SCRIPT Language="JavaScript">
<!--
document.write("<img src='./x.cgi?");
document.write("width='0' height='0'>");
// -->
</SCRIPT>

よくアクセスログ系である
これのこと?

QYou don't have permission to access /pwmgr/admin.cgi on this server.

wadaxというレンタルサーバーを利用しています。
CGIを設置しようとしたら
設置しようとしたディレクトリー内のCGIファイルすべてに
タブ名に「403 Forbidden」
本文に「Forbidden
You don't have permission to access ○○/○○ on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.」

というエラーが出ます。同じディレクトリー内のhtmlファイルは表示されます。
XREAで同じCGIは問題なく動作しました。どういう理由が考えられるでしょうか?

Aベストアンサー

「403 Forbidden」 は、このファイルへのアクセスは許可されていませんってことです。
ですから、次の原因が考えられます。

(1) CGIアプリケーションの実行が許可されていない。
  この場合は、.htaccessファイルを使ってCGIアプリケーションの実行が可能になるサーバーもあります。

(2) CGIアプリケーション実行ファイルのパーミッション指定が間違っている。この場合、通常は「500 Internal Server Error」になるんですけどね。

いずれにしても、レンタルサーバーにはマニュアルページがあるはずですからよく見てみましょう。

QCGIへのアクセスが集中した場合にアクセスを一時的に制限したり、エラーメッセージを表示したり、予備のCGIに飛ばす方法。

CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイトなどを目にしますが、どのようにして実現しているのでしょうか。例えば、flockなどの排他処理によって、一定時間内は1ユーザーからのアクセスしか受け付けないといった処理は可能かと思いますが、3ユーザーまでのアクセスのみ受け付けるといった方法はあるのでしょうか。

また、サーバダウンなどにより、CGIが動作しない場合に、エラーメッセージを表示したり、予備のCGIに飛ばす方法はありますでしょうか。
例えば、Aサーバのmain.cgiを動作させたい場合に、まずBサーバのpre.cgiにとばし、Bサーバのpre.cgiからAサーバのmain.cgiへのアクセスを試み、Aサーバがダウンしている為にアクセスに失敗した場合に、Bサーバ内のerroor.htmやsub.cgiに飛ばすことなどはできるのでしょうか。

できれば、CGI(perl)で実現したいのですが、有効な方法がございましたら、恐れ入りますが、教えていただけないでしょうか。もしも可能でしたら、簡単なサンプルのスクリプト等を添えていただけると大変助かります。何卒よろしくお願いいたします。

CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイトなどを目にしますが、どのようにして実現しているのでしょうか。例えば、flockなどの排他処理によって、一定時間内は1ユーザーからのアクセスしか受け付けないといった処理は可能かと思いますが、3ユーザーまでのアクセスのみ受け付けるといった方法はあるのでしょうか。

また、サーバダウンなどにより、CGIが動作しない場合に、エラーメッセージを表示したり、予備のCGIに飛ばす方法はありますでしょうか。
例えば、Aサー...続きを読む

Aベストアンサー

>、FastCGIやmod_perlというのはどのようなものでしょうか。

Googleあたりで調べれば、かなりヒットするので、まずは調べてみて下さい。。。
↓本家
http://www.fastcgi.com/
http://perl.apache.org/

WWWサーバに組み込む形になるので、独自サーバじゃないと使えませんけど。
レンタルサーバの中には、使えるところもあるらしいですよ。

>大変申し訳ございませんが、参考URLやサンプルなどご存知ないでしょうか

ないと思います。(^^;
というか、Aサーバ上に常駐(Unixならcronか)させたプログラムに、定期的にBサーバに通知させようと考えたわけですが、サンプルのようなものはどこかにあるのかもしれませんけど、見つけるのは大変でしょう。

いずれにしても、BサーバのCGIでAサーバの状態を取得し、その後AサーバのCGIを呼び出すのだとすると、今度はBサーバの負荷が高くなります。
負荷を軽減したり、サーバダウンした場合の対処方法として色々講じようとするのも良いのですが、あまり色々考えすぎると、返って別の部分で負荷が高くなったり、広げすぎて収拾がつかなくなったりするものです。
個々のCGIの処理を軽くするようにするなど、CGI側の工夫で回避できる部分は多いので、そちらがまず先かと思います。(余分な処理をさせない、より速いアルゴリズムを選ぶ、2度の処理に分けられるなら2つのCGIに分け2ステップで処理するetc)

>、FastCGIやmod_perlというのはどのようなものでしょうか。

Googleあたりで調べれば、かなりヒットするので、まずは調べてみて下さい。。。
↓本家
http://www.fastcgi.com/
http://perl.apache.org/

WWWサーバに組み込む形になるので、独自サーバじゃないと使えませんけど。
レンタルサーバの中には、使えるところもあるらしいですよ。

>大変申し訳ございませんが、参考URLやサンプルなどご存知ないでしょうか

ないと思います。(^^;
というか、Aサーバ上に常駐(Unixならcronか)させたプログラ...続きを読む

Q.htacceseとCGIのからみ

/public_html/aaaa/
以下に、.htacceseを入れSSIを使いました。
けれど、、、それ以来、普通に動いていたCGIが
/public_html/aaaa/cgi-bin/
パーミッションエラーと出るようになってしまいました(汗)
/public_html/cgi-bin/
ここに移動させても、やはりパーミッションエラーが・・・(汗)
これは、.htacceseが悪いのでしょうか?
それとも、SSIが悪さをしているのでしょうか(汗)
ちなみに、きちんとアップロードはアスキーだし、パーミッションも合わせています。

もしかすると、いったんアップロードしたCGIをバイナリで落とさずに、自動で落として、それをアップし直していることに問題があるのでしょうか!?

よろしければどなたかヒント(?)をください!

Aベストアンサー

確認ですが、
/public_html/aaaa/
に.htaccessを設置したのですよね。
そして、
/public_html/cgi-bin/
でも、動かないとのことですよね。
でしたら、サーバーの設定かもしれません。
たまに、管理者の設定で/cgi-bin/以下では、動作しないようになっている場合があるそうです。(Apache)

1.CGIファイルのパーミッションを確認してください。
2./cgi-bin/の名前は使わない
3./public_html/以下の.htaccessに、

AddType text/html cgi
AddHandler cgi-script cgi
Options +ExecCGI +Includes

と記述してみる。
試してみてください。


このカテゴリの人気Q&Aランキング

おすすめ情報