• ベストアンサー

CGIとは結局何なのでしょうか。

CGIの流れというものについて勉強したところ、 サーバがユーザから要求を受けて、 そしてCGIという決まりに従って 外部プログラムを起動し、結果を返してもらい、 またユーザに返す。というものらしいですが… では、結局のところ、CGIという決まりは どういう決まりなのでしょうか。 どなたか教えていただけないでしょうか。

  • CGI
  • 回答数6
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.5

>結局のところ、CGIという決まりはどういう決まりなのでしょうか。 RFC3875という文書で定められています。 http://www.studyinghttp.net/rfc_ja/rfc3875 主要な記述は次の3つの章でしょうか。   3 スクリプトの呼び出し   4 CGI リクエスト   6 CGI レスポンス この文書に定義されている変数やデータ形式を用いて,要求(request)と応答(response)のやりとりができるのであれば, そのWebサーバはCGIに対応していると呼ばれますし, そのサーバ側プログラムはCGIプログラムと呼ばれます。 用いるプログラム言語については規定されていませんから,どんなプログラム言語で書かれていようとRFC3875の仕様を満たすのであればCGIプログラムです。

その他の回答 (5)

  • gon987
  • ベストアンサー率16% (53/313)
回答No.6

Apacheで言えばmod_cgi.soを介して呼び出されるシステム。 PerlやC言語などまたPHPもCGIモードで動かせる 逆にPerlもPHPもCGIモードではなくてWebサーバのモジュールとして直接呼び出すことができる。

  • nijjin
  • ベストアンサー率27% (4702/17413)
回答No.4

プログラムの一種です。 テキストの書式を取った形でかつインターネットを主体としています。 よく使われるものの一つはBBS(掲示板)です。

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.3

ここで言うサーバとは、ユーザからの要求を受け付けるマシンとしてのサーバもありますが、 具体的にはWEBサーバの事を指しています。 サーバには他にも、認証サーバとかデータベースサーバとか ファイルサーバとかプロキシサーバなどなどがあります。 WEBサーバ自体には 狭義にはユーザからの要求に対応するHTMLファイルを送り返すという処理しか行いません。 そこで、同じHTMLなんだけれども何かをきっかけに 表示内容を変更する処理が行えるようにすると、 ファイルやデータの管理がやりやすくなる場合があります。 実際、この質問サイトも「質問タイトル、質問内容、回答内容」などのデータを 質問IDをキッカケ(キー)としてデータ管理することで、 見た目の各質問毎のHTML自体は1枚分で処理されています。 その処理を行う言語にPHPやPerlやASP、Javaなどなどがあり それを広義に「CGI処理部」と呼ぶこともあります。 質問文にある「CGIという決まり」はユーザからの要求に対応した CGI処理部を呼び出すというWEBサーバの拡張部分の辺りをいうのでしょう。 ただ、そこで具体的に何が行われているのか、どういう設定が絡んでくるのか といった内容までは知らないので、私からの説明は失礼ながらこの辺りにて。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

CGI=Common Gateway Interfaceはクライアントからサーバに対して リクエスト(要求)が送られたときにサーバがある決まりに従って プログラムを実行するための仕組みなどのことです。 この決まりに関しては事細かく規定されていますけど、仕様書とか しっかりみないと分からないでしょうね。 サーバはこの決まり(仕様)に従ってプログラムを実行することによって CGIを実行できます。 CGIの実行機能はサーバ自体が持っていることもあればサーバの モジュールや拡張機能として実装されることもあります。 基本的にはそのサーバコンピュータ上で動作するプログラムや スクリプトであれば言語は問いませんが、サーバプロセス内で プログラムを実行しているため、プログラム自体の実行スピードや 安定性などに大きく影響を受けます。 言語仕様が簡単で更にすぐに実行できて手軽であり、CGIとして 実行するのにうってつけの機能を標準で実装しているためCGIの 言語としてよくPerlが利用されるため、CGI=Perlと思っている人も いますがこれは間違いです。 Cなどでコンパイルした実行ファイルやUNIX/Linux系ならシェル、 Winならバッチなどでも作成することは不可能ではありません。 (実用性があるかどうかなどは別の話) ただ、補足説明なしにCGIといった場合は大抵、Perl CGI(Perlで実装 されたCGI)を指します。 似たような技術にPHP,ASP,JSPなどがあります。 PHPはCGIモードとして動作させることもできます。

参考URL:
http://ja.wikipedia.org/wiki/Common_Gateway_Interface
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

CGIっていう規則性が無かったらどうデータを受け取るのか判らなくなるんじゃない? そして返すにもただデータを渡してもだめだから どう返すべきであるかというのを定めて置いた方が良い事になるよね? jpgという拡張子ならjpeg画像だという規則 と同じ。(実際には中にjpegですよーっていう印が有るんだけど) それが無かったらそれが何のデータでどう処理するのか 全くわからなくなるでしょ それを件の受け答えに関して定めた物の事。

mogesato
質問者

お礼

なるほど、つまりhttpプロトコルのようなものですか。 ちょっとまた考えてみたいと思います。 ありがとうございました。

関連するQ&A

  • CGIについて質問です 基本の基本です

    CGIについて勉強しようと考えているのですが全く意味が分かりません。 ブラウザの要求に対して、プログラムを起動さすためのサーバー側の仕組み。ということは分かるのですが、HPの中でどういう風に使用すればいいのでしょうか。 JavaScriptみたいに記述するのでしょうか。 それともCGIはサーバー側のシステムでこちらはPHPやPerl(PHPやPerlも言語ということしか分かりません。JavaScriptと同じ様な捉え方でいいのでしょうか)を使ってCGIを起動さすという考え方でいいのでしょうか。 全く知識はありませんが、WEBに関して色々勉強したいと考えているのでよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • CGIから別サーバーのCGIの呼び出し

    以下の二つのサーバーでCGIを動作させようと考えています。  サーバーA:ユーザーからアクセスできる。  サーバーB:サーバーAからアクセスでき、ユーザーからはアクセスできない。 この環境で (1)サーバーAでリクエストを受け、簡単な処理をする。 (2)サーバーA上のCGIからサーバーB上のCGIを呼び出す。 (3)サーバーB上で処理(etc. メールの送信)を行い、処理結果をサーバーAのCGIに返す。 (4)サーバーA上で簡単な処理を行い、結果をユーザーに表示する というような処理を考えています。 perlでは、このような処理を実装することは可能でしょうか? サーバーAからサーバーBにあるスクリプトファイルを読み込んで、サーバーAで実行するということはできそうなのですが、サーバーB上のCGIはサーバーBで実行するというようなことができるのかがわかりません。 初心者的な質問で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIからGUIプログラムを立ち上げたい(Windows)

    CGIからGUIプログラムを立ち上げたい(Windows) Windows XP SP2パソコン上で、自分のマシン上でファイルを閲覧したりプログラムを起動・制御するユーザインタフェースをブラウザにしようと、Apache/2.2.4(Win32)でローカルにhttpdを立ち上げています。 ブラウザ表示文書からCGIとして呼び出されたPerl(ActivePerl 5.005_03)プログラムが、system関数や``記法で外部のプログラムを実行することができますね。 ところが、起動した外部プログラムがウィンドウを開いてユーザと対話する種類のプログラム、つまりGUIプログラムの場合に限って、ウィンドウが開いてくれないので、したいことができません。 この原因と対策がお分かりになる方、教えてください。 (たとえば単純化のためにWindowsの電卓プログラムcalc.exeを起動してもウィンドウが出てくれません。 PowerShellスクリプト経由にしても元がブラウザだという情報が波及するらしくウィンドウが立ち上がりません。)

    • 締切済み
    • CGI
  • .cgiをhtmlに乗せる方法を教えて下さい。

    こんにちわ。cgiのファイルで点検済みのものをhtmlに乗せたいのですが、フレームで乗せるとサーバーテストのときにのってくるのですが、 普通のtdに入れたら出てきませんでした。cgiを乗せるときは何か決まりがあるのでしょうか。どうかよろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIを設置したい!

    CGIをレンタルサーバにアップすると広告が出てきますよね。 これはどうしようもないのですが、まずポップアップ広告がうざい。 つぎに、外部のサイトからCGIを呼び出そうとすると禁止がかかってる。 特に外部アクセスの禁止がとても困る。(まぁサーバ側も困ってるんだろうけど) 外部アクセスが禁止じゃない、虫のいいサーバを知りませんか? あと、もちろん無料で。

    • 締切済み
    • CGI
  • Perl(cgi)からPerl(cgi)への引数

    (1)Perl(cgi)から(2)Perl(cgi)へ引数(データ)を渡す方法を教えてください。 プログラムの流れとしましては、 (1):データベースを検索&該当結果の番号をリンクで表示 (2):(1)でクリックしたリンクと対応する結果を表示 となっております。 また、セキュリティの事を考えて「POST」で送りたいと考えています。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 外部CGIの実行結果を変数内に取り出したい

    こんにちは。 外部CGIの以下のような実行結果を、プログラム内(変数)に読み込むにはどうしたらよいのでしょう。 簡単そうなのにできないので・・。 「Content-type: text/html 文章」 外部プログラムが吐く上記のような内容を、普通に変数内に読み込みたいのです。 しかしopenでは実行前の、cgiの中身がそのまま出てしまいますし、 systemやexecコマンドでは、実行結果の内容が、変数に格納される前に、そのまま出力されてしまいます。 外部cgiの方を変更するしかないのでしょうか? どなたかお教えください。

    • ベストアンサー
    • Perl
  • HTML上(javascript)からCGIを実行する方法

    javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI) を実行する方法を探しています。 下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に 『test』と表示するのみ)を表示したいと考えています。 利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、 cgiが使用できるサーバ上のcgi結果を取得したいものです。 通常のcgiのように、1ページでcgi結果を表示するものではなく、 HTMLファイルの一部にcgi処理結果を表示させたいものです。 そもそも、SSIを使用しなければ下記のようなHTML内にcgiなどの 実行結果を表示する事は出来ないのでしょうか。 よろしくお願い致します。 ※下例のプログラムではcgi結果は表示されませんでした・・・。 ---<index.htm>---------------------------------------- <HTML> <BODY> <SCRIPT language="Javascript" src="http://xxx.xxx.xxx.xxx/test.cgi"></SCRIPT> </BODY> </HTML> ---<test.cgi>---------------------------------------- #!/usr/bin/perl print "test"

  • CGIの起動が遅い

    Web上から作成したCGIを起動した場合に、そのCGIが存在するサーバ上ではすぐに実行されるのですが、他のPCからサーバにアクセスしてCGIを起動するとブラウザの下部にCGI実行中のメッセージが表示されてから結果が表示されるまでに時間がかかっています。(約30-60秒) 他のネットワーク処理等は普通に実行できるので特にネットワークが重い等の問題はないと思うのですが何が問題なのかアドバイスをお願いします。 サーバOSはRedHat Linux 5.1、apacheはver2.2です。

    • 締切済み
    • CGI
  • CGIとPHPは違う!と言って聞かない人がいます

    現場でPHPやPerlを使っている方に質問です。 CGIとPHPはプログラム経験を積んだ人にしか分からないような違いがあるのでしょうか? 今の職場でPHPとCGI/Perlは違うものだと言っている人がいます。 CGIはウェブサーバ上でユーザプログラムを動作させるための仕組だと解釈していたため、その人と意見が対立しました。

    • ベストアンサー
    • CGI

専門家に質問してみよう