1. ホーム
  2. cgi

[解決済み] CGI(Common Gateway Interface)とは何ですか?

2022-03-20 22:42:45

質問

CGIとはCommon Gateway Interfaceのことです。その名の通り、あらゆるものに共通のゲートウェイ・インターフェースです。名前からして、とても些細で素朴なものです。このことを私は理解していたような気がするし、この言葉に出会うたびにそう感じていた。でも、ぶっちゃけ、そうじゃなかった。今も混乱している。

私はWeb開発の経験があるPHPプログラマーです。

<ブロッククオート

ユーザー(クライアント)のページへのリクエスト ---> ウェブサーバー(->組み込みのPHP インタプリタ) ----> サーバサイド(PHP)スクリプト ---> MySQLサーバ。

ここで、私のPHPスクリプトがMySQLサーバーやMATLABサーバー、その他のサーバーから結果を取得することができるとします。

では、PHPスクリプトはCGIになるのでしょうか?Webサーバとその他のサーバとの間のインターフェイスだから?よくわからないけど。CGIをテクノロジーと呼ぶこともあれば、プログラムと呼ぶこともあるし、他のサーバーと呼ぶこともある。

  • CGIとは具体的にどのようなものですか?

  • の大きな特徴は何ですか? /cgi-bin/*.cgi ? どうしたんだ、これ?これは何なのでしょう cgi-bin のためのサーバー上のディレクトリです。なぜ、*.cgiの拡張子があるのかわからない。

  • どうしていつもPerlが邪魔をするんだ。CGI & Perl(言語)です。この2つもどうなんだろう。ほとんどいつもこの2つを組み合わせて "CGI &; Perl" を聞き続けているのです。この本もその好例です Perl による CGI プログラミング . PHP/JSP/ASPでCGIプログラミング"ではダメなのでしょうか?そんなの見たことない。

  • C言語によるCGIプログラミング は、私をたくさん混乱させる。 "。 インC "?マジかーーーー!?なんて言ったらいいのかわからないけど ただただ困惑しています " でC "?これでは何もかもが変わってしまいます。プログラムはコンパイルして実行する必要があります。これは、私のWebプログラミングの見方を完全に変えてしまう。いつコンパイルすればいいのか?プログラムはどのように実行されるのか(機械語なので、独立したプロセスとして実行されなければならない)。ウェブサーバーとの通信はどうするのか?ソケットプログラミングを使用して、すべてのサーバー(私の例では、MATLABとMySQL)とインターフェイスするIPC?私は迷っています!

  • CGIは非推奨で、もう使われていないと言われています。そうなのでしょうか?最新のアップデートは何ですか?

<ブロッククオート

一度だけ、以下のような状況に陥ったことがあります。 HTTP PUT リクエストにアクセスできるようにする必要がありました。 ウェブサーバー(Apache HTTPD)です。その長い に戻ります。で、覚えている限りではこんな感じです。 をしました。

  1. Apache HTTPDの設定ファイルを編集し、ウェブサーバーに、以下のように伝える。 すべての HTTP PUT リクエストをいくつかの put.php ( このPHPは私が書いたものです スクリプト)

  2. リクエストを処理するためにput.phpを実装する(ファイルを保存する場所 を指定)

CGIスクリプトを書いたと言われました。 マジで何のことかわからなかった。 ということです。

  • 本当にCGI Scriptを書いたのだろうか?

私の混乱が何であるかを理解していただけたでしょうか。(なぜなら、私自身、どこで混乱しているのかわからないからです)。回答はできるだけシンプルにするよう、皆さんにお願いします。私は本当に派手な専門用語を理解することができません。少なくともこの件に関しては。

EDITです。

こんな素晴らしいチュートリアルを見つけました。 CGI プログラミングは簡単! - CGI チュートリアル の概念を説明しています。 最もシンプル をご覧ください。この記事を読んだ後、次の記事を読むとよいでしょう。 C言語によるCGIプログラミング入門 を読んで、実際のコードサンプルで理解を補ってください。また、このチュートリアルのリンクをWikipediaの記事に追加しておきました。 http://en.wikipedia.org/wiki/Common_Gateway_Interface

解決方法は?

CGIは、アプリケーションとのデータの受け渡し方法をウェブサーバーに指示するインターフェースです。 具体的には、リクエスト情報が環境変数でどのように渡されるか (リクエストタイプ、リモート IP アドレスなど)、リクエストボディが標準入力でどのように渡されるか、そしてレスポンスが標準出力でどのように渡されるかが記述されています。を参照することができます。 CGI仕様 をご覧ください。

画像を使用するため。

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

すべてではないにしても、ほとんどのウェブサーバーは、「CGI」としてプログラムを実行するように設定することができます。つまり、ウェブサーバはリクエストを受け取ると、データを特定のプログラムに転送し、いくつかの環境変数を設定し、標準入力と標準出力を介してパラメータをマーシャリングするので、プログラムはどこで何を探せばいいのかがわかります。

主な利点は、ウェブサーバーとプログラムの両方が CGI の仕組みを知っていれば、ウェブから任意の実行コードを実行できることです。だから、CGI が使える普通の Web サーバで、C や Bash で Web プログラムを書くことができるのです。そして、ほとんどのプログラミング環境では、標準入力、標準出力、環境変数を簡単に使用することができます。

あなたの場合、スクリプトとウェブサーバーとの間の通信に PHP 固有の別の手段を使用した可能性が高いです。これは、あなたの質問にもあるように、 mod_php と呼ばれる埋め込みインタプリタです。

では、質問にお答えします。

<ブロッククオート

CGIとは具体的にどのようなものですか?

上記をご参照ください。

/cgi-bin/*.cgiってどうなんだろう?これはどうしたんだ?サーバーにあるこのcgi-binディレクトリが何のためにあるのかわからない。なぜ*.cgiの拡張子があるのかわからない。

多くのウェブサーバーは、このディレクトリにあるすべてのバイナリーをCGIプログラムとして実行するようにあらかじめ設定されています。.cgi 拡張子は、CGI を通して動作することが期待される実行ファイルを表します。

<ブロッククオート

どうしていつもPerlが邪魔をするのでしょう。CGI & Perl (言語)です。この2つもどうなっているのかわからない。ほとんどいつもこの2つを組み合わせて "CGI &Perl" と聞き続けているのです。この本もその好例で、PerlによるCGIプログラミング PHP/JSP/ASPによるCGIプログラミングではありません。こんなの見たことない。

Perlは古く(PHP、JSP、ASPはすべてCGIがすでに古い時代に生まれ、PerlはCGIが新しい時代に存在した)、CGIを介して動的なWebページを提供するのに非常に優れた言語であることでかなり有名になったからです。今日では、ウェブサーバでPerlを実行するための他の選択肢もあります。 mod_perl .

CでCGIプログラミング これは私を大いに混乱させる。マジですか?なんて言っていいのかわからない。Cで?これはすべてを変えます。プログラムはコンパイルして実行する必要があります。これは、私のWebプログラミングの見方を完全に変えるものです。いつコンパイルすればいいんだ?プログラムはどのように実行されるのか(機械語であるため、独立したプロセスとして実行されなければならない)。ウェブサーバーとの通信はどうするのか?ソケットプログラミングを使用して、すべてのサーバー(私の例では、MATLABとMySQL)とインターフェイスするIPC?私は迷っています!

実行ファイルを一度コンパイルして、ウェブサーバーがプログラムを実行し、リクエストのデータをプログラムに渡し、受け取ったレスポンスを出力するのです。CGIでは、1つのリクエストに対して1つのプログラムインスタンスが起動されるように指定されています。このため、CGIは非効率的であり、現在では一種の時代遅れとなっています。

<ブロッククオート

CGIは非推奨と言われています。もう使われていないのです。そうなのでしょうか?その最新のアップデートは何ですか?

CGIは、パフォーマンスが最重要ではなく、コードを実行するためのシンプルな手段が必要な場合に、今でも使われています。先に述べた理由から非効率的であり、Web 環境で任意のプログラムを実行する、より現代的な手段があります。現在、最も有名なのは FastCGI .