質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

3回答

435閲覧

CGIって何ですか??

trifula

総合スコア25

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/08/23 00:47

CGI(シージーアイ、Common Gateway Interface)とは、ウェブサーバ上で動作するプログラムがウェブページを生成できるようにする仕組みです。
とあるのですが、という事はnode.jsのプログラムもCGIというくくりの中に入るのでしょうか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

似ていますが違います。

Wikipedia のページを見て貰うと分かるのですが

CGIプログラムはウェブサーバがクライアントからのリクエストに応じて起動する。

ここが違います。CGI はウェブサーバがリクエストを受け、そのリクエスト毎に小さなプログラムを起動します。そのプログラムは以下の情報をウェブサーバから貰います。

  • 環境変数から HTTP のヘッダ情報を
  • 標準入力から POST データを
  • コマンドライン引数からリクエストパスを

そして色々な処理を行い HTML や画像など、ウェブサーバに応答する結果を HTTP ヘッダ付きで標準出力に吐き出します。ウェブサーバはその結果をブラウザに応答するという訳です。ですので CGI の実行にはウェブサーバ(例えば apache)が必須となります。また CGI プログラムはテキストの入出力だけ出来れば特にライブラリなど使わずに実装できる事になります。例えば簡単な CGI であれば以下の様な物になります。

#!/bin/sh echo "content-type: text/plain\n\nHello World"

かたや nodejs などはそれ自体がウェブサーバだと思って下さい。標準入出力やコマンドライン引数、環境変数など使わず起動済みのプログラム自らが HTTP プロトコルを解析して処理して応答すると思って貰えれば良いです。

上記に書いたウェブサーバとやり取りする仕組みの事を CGI と呼びます。

CGI プログラムはリクエスト毎に起動して応答を返した後で終了する事になるので、サーバ側で状態を保持した様なプログラムを作るには毎回データベースに問い合わせる必要があります。nodejs の場合であればこれがメモリで済む訳です。

投稿2017/08/23 01:04

編集2017/08/23 01:28
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いえ、CGIというのはプログラムとWebサーバのやりとりの規格です。

Node.jsはそれ自身をWebサーバとして動かすのが一般的なので、CGIによるやり取りはあまり使いません。

投稿2017/08/23 00:59

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<本来の意味>
Common Gateway Interfaceは、最後の単語がInterfaceなので分かる通り、インターフェース(システム間でデータのやり取り、機能の呼び出し方法等を定めた取り決め)です。

ブラウザからURLを指定してwebサーバにアクセスすれば、URLに対応するファイルの内容がブラウザに返されて、表示されます。
このファイルの内容を返す仕組みだけでは、サーバにデータをアップロードしたり、時々刻々変化するデータを取得したりすることができませんので、ブラウザからデータや操作指示を受け取り、サーバがそれを処理するプログラムを呼び出して、結果をブラウザに返す仕組みをサーバに組み込めるようになりました。

いろんな人がデータのやり取りの仕方などを勝手に決めると混乱するので、共通(common)する方式が決められました。サーバとそこから呼び出されるプログラムとの間の出入り口(gateway)に関するインタフェースなので、Common Gateway Interfaceと呼ばれている訳です。

CGIの規定(日本語対訳)にリンクをはっておきます。
Common Gateway Interface(RFC3875) 日本語対訳
==
<CGIプログラム>
サーバから呼び出されるプログラムは、CGIを介して呼び出されるので「CGIプログラム」と呼ばれます。そして、「CGIプログラム」を略してCGIと呼ぶ人が居ます。『ウェブサーバ上で動作するプログラムがウェブページを生成できるようにする仕組みです。』というのは「CGIプログラム」を説明したものです。
CGIが「CGIプログラム」を略したものである場合、「node.jsのプログラムもCGIというくくりの中に入る」ことになります。

CGIという言葉が、本来のCGIの意味で使われているのか、CGIプログラムの意味で使われているのかを判断しておかないと、訳が判らない状況になるので注意が必要です。

投稿2017/08/23 02:00

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/08/23 02:20

CGI はリクエスト毎にプログラムが実行され、その応答をウェブサーバを介して返す仕組みなので nodejs とは明確に区別すべきかと思います。 ちなみに環境変数からメタ情報を得る仕組みが仕様として書かれていますのでCGIプログラムは終了しないと新しい環境変数を得る事ができません。つまり keep-alive の実装は出来ないという意味になります。かたや nodejs は HTTP プロトコルを解釈するので keep-alive が可能です。「node.jsのプログラムもCGIというくくりの中に入る」が少し混乱を招く表現かなと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問