CGIを使用する

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 2004 (Modified)


4D Webサーバでは、CGI (Common Gateway Interface) がサポートされます。WebサーバとCGIとの関係は、4Dメソッドとプラグインの関係に似ています。CGIはWebサーバによって呼び出され、タスクを実行して応答、つまり完全なWebページまたはサーバより送信されたページに挿入されたHTMLコードを返します。CGIは、ビジタカウンタの表示、ゲストブックの作成、フォームメールの受信等を行うため、頻繁に使用されます。現在では数多くのCGIが利用可能であり、その大半はフリーウェアです。

Note: 本来、CGIは外部アプリケーションとHTTPサーバがやり取りを行うための規約でした。今ではCGIという用語は、外部アプリケーションそのものに対して使用されています。

4D Webサーバは、2種類の方法でCGIをサポートしています:

・4D Webサーバでは自動モードまたは手動モードでCGIを使用することができます。

・4D Webサーバでは、CGIエクステンションを使用して他のHTTPサーバと対話することができます (Windowsのみ) 。

4D WebサーバからCGIを実行する


Mac OS XおよびWindowsにおいて、4DはあらゆるタイプのCGIをサポートします。CGIは、アプリケーションやPERLスクリプトであったり、またはWebサーバとの対話を行うDLLの場合もあります。

- 実行形式 (.EXE): "コンソール (標準入出力) "と環境変数を使用します。通常、ソースコードはクロスプラットフォームです (WindowsおよびUnix) 。CGI名は一般的に、nnn.exeまたはnph-nnn.exeとなります。

この種類のCGIに関する詳細は、インターネットサイトhttp://hoohoo.ncsa.uiuc.edu/cgi/ を参照してください。

- DLL ISAPI: IIS (Internet Information Server) 用のエクステンションです。CGI名はnnn.dll またはnph-nnn.dllとなります。Webサーバが処理実行のため中断されると、DLLがダウンロードされます。

この種類のCGIに関する詳細は、インターネットサイトhttp://www.microsoft.com/iis/を参照してください。- PERL スクリプト: "コンソール"と環境変数を使用します。CGIの実行にはインタプリタが必要です。しかし、これらはクロスプラットフォームです (Windows、UnixおよびMac OS) 。CGI名はnnnn.pl、nph-nnnn.pl、nnnn.cgiまたはnph-nnnn.cgiとなります。

この種類のCGIに関する詳細は、インターネットサイトhttp://www.perl.com/ を参照して

ください。

自動モードでCGIを実行する

自動モードでのCGIの呼び出しは、CGIによって実行されるタスクに応じて、ページに挿入されたURLやアクション、またはHTMLタグを介して行われます。いかなる場合でも、HTML文字列には/cgi-bin/に続けてCGI名、あるいはHTML構文を使用したパスと検索文字列を含む必要があります。

例えば、"http://195.1.2.3/cgi-bin/search.exe"というURLにより、search.exeというCGIが起動されます。同様に、<IMG SRC="/special/cgi-bin/counter.exe">というマーカーがHTMLページに置かれている場合、このページが送信されるとcounter.exeというCGIが起動されます。

CGIは、cgi-binという名前のフォルダのルートに配置する必要があります。このフォルダは、Webサーバのルート、またはサブフォルダに置きます。サーバには複数のcgi-binフォルダを保持しておくことができます。また、このフォルダには実行形式のアプリケーション以外のファイルを入れておくことができますが、最新のものだけがWebクライアントから呼び出せます。

CGI"Count.exe"を使用したインストールの例:

いくつかの例、または場所と対応するURLを以下に示します:

項目の場所         対応するURL
(Webサーバルート)         
[mybase] folder         
   mybase.4db (ストラクチャ)      (http://195.1.2.3/)
[cgi-bin] folder         
   counter.exe         (http://195.1.2.3/cgi-bin/counter.exe)
[Misc] folder         
   [cgi-bin] folder      
      script.pl      (http://195.1.2.3/Misc/cgi-bin/script.pl)

手動モードでCGIを実行する

手動モードでのCGIの呼び出しには、SET CGI EXECUTABLEコマンドを使用する必要があります。特に、このコマンドを使用すると、Webユーザに対してURL上に表示されないようにCGIを実行することができます。

この件に関する詳細は、このコマンドの説明を参照してください。

4D WebサーバとCGIとの対話

CGIの呼び出しによって、4D環境が変更されることはありません (セレクション、変数等) 。

4Dは応答サイズの制限を行いませんが、CGIに割り当てられる最大処理時間には30 秒という制限がある点に注意してください。この時間を超えると、Webサーバはエラーを返します。

呼び出し元のモードに関わらず、CGIは常にコンテキストを使用せずに実行されます。しかし、コンテキストモードでは、CGIがコンテキストを非同期化してしまう可能性があるため、HTMLコードを送り返すCGIは使用しないようお勧めします。

4Dから返されるCGI呼び出しに関するエラー

CGIの呼び出しによりエラーが発生すると、4Dは以下の応答のいずれか1つを標準のHTMLページに納めて返します:

・Not found (見つからない) :4DはCGIを見つけられません、またはPERLインタプリタが見つかりません。

・Forbidden (禁止) :Webクライアントは、[cgi-bin]フォルダ内の実行形式ファイル以外のものを要求しています。

・Timeout (タイムアウト) :リクエストは、CGIにより30 秒以内に処理されませんでした。

・Bad Answer (不当な応答) :4DはCGIの応答を処理できません、またはISAPI DLLが例外処理を引き起こしました。

・Internal Error (内部エラー) :メモリーフルなど

Note: CGIが動作しない場合は、CGIに関する実行権が適切であるか、またCGIスクリプトの改行が正しいかどうかを調べてください。

CGIディベロッパへの情報

この節は、4Dデータベース用に特定のCGIを開発しようとするプログラマを主に対象としています。

環境変数

4DはCGI/1.1仕様、および以下の情報に従って環境変数の定義を行います:

GATEWAY_INTERFACE: 常に“CGI/1.1”

SERVER_SOFTWARE: 常に“4D_v11_SQL/version”

SERVER_PROTOCOL: “HTTP/1.0”または“HTTP/1.1”

SERVER_PORT_SECURE: HTTP接続が暗号化モードである場合には"1"が、それ以外は"0"が納められます。

PATH_TRANSLATED: HTMLサーバルートへのフルパス、およびCGI名に続けてパス部分が納められます。セキュリティ上の理由から、この部分には文字シーケンス"//"や".."を入れることはできません。

例 : サーバのルートが“C:/web”であるとき、/cgi-bin/cgi.exe/pathのようなCGI呼び出しに対し、PATH_TRANSLATEDの値は"C:/web/path"になります。/cgi-bin/cgi.exe/../パスのようなCGI呼び出しに対して、4Dは"Forbidden"エラーを返します。

REMOTE_IDENT: ユーザ名 (適切であれば) 、それ以外は未定義。

HTTP_AUTHORIZATION, HTTP_CONTENT_LENGTH そして HTTP_CONTENT_TYPE: 未定義

ALL_HTTP およびURLは、ISAPI DLL呼び出しの場合に定義されます。

CERT_xxxHTTPS_xxx は、接続が保護されている場合に定義されます (DLLのみ) 。

Note: SET ENVIRONMENT VARIABLE コマンドを使用して、これらの変数を設定することができます。

標準の環境変数に加え、4Dではテキスト変数のFORMVAR_variablenameが提供されます:

- リクエストが"POST"メソッドで送信された場合、バイナリフィールド (INPUT TYPE="FILE") を除き、これらの変数にはフォームの入力エリア ( 例えばFORMVAR_NAMEFORMVAR_FIRSTNAME等) が代入されます。このシステムは、"www/url-encoded"および"multipart/form-data"でエンコードされたフォームとともに使用できます。

- リクエストが"GET"メソッドで送信された場合、これらの変数にはリクエストの文字列に渡された値が代入されます (例えば.../cgi.exe?name=smith&code=75というURLの場合、FORMVAR_NAMEには"smith"という値が、FORMVAR_CODEには"75"という値が入ります) 。

この機能により、フォームの処理はさらに楽になりますが ("a=1&b=2&..."のような文字列を解析する必要がない) 、このCGIは4D特定のものになります。

CGIより送信された応答の処理

CGI (Windows実行形式またはPERLスクリプト) の名前が"nph-" (No Parsing Header) で始まる場合、4Dはその応答を"現状のまま"Webクライアントに送信します。この場合、HTTPの規約に準拠するかどうかはCGI次第です。ISAPI DLLに関しては、4Dは名前の先頭が何であろうと、その応答を解析しません。

上記以外の場合、4DはHTTPヘッダを送信します:

- "Content-Type"がCGIにより指定されていない場合、4Dは常に"Content-Type:text/html"を送信します。

- "Location"が指定されている場合、4Dはこの応答の他の要素を考慮せずに、HTTPのリダイレクションを実行します。

- "Status"が指定されていない場合、4Dは"HTTP/1.0 200 OK"を送信します。

4Dは、HTTP応答のヘッダ内にある、あらゆる種類の改行コンビネーション (Windows-CRLF、Mac OS-CR、Unix-LF) を受け付け、再フォーマットします。

ISAPI DLLに関して4Dは非同期処理 (HttpExtensionProcHSE_STATUS_PENDINGを返す) を受け付けます。ServerSupportFunction (HSE_REQ_DONE_WITH_SESSION) の呼び出しは、必ず次の30秒の間に行われなければなりません。関数TerminateExtensionが定義されると、常にHSE_TERM_MUST_UNLOADの値を使って呼び出され

ます。

CGIを使用した4D Webサーバ呼び出し (Windowsのみ)


4Dでは、2つのエクステンション、4DISAPI.DLLNPH-CGI4D.EXEが提供されます。これらのエクステンションは、HTTPサーバが4DのHTTPサーバへリクエストを送信できるように設計されています。例えば、非暗号化モードの4D Web サーバを、暗号化モードで動作する他のHTTPサーバに統合できます。

警告: これら2つのエクステンションはWindowsでのみ使用できます。

・4DISAPIエクステンションは、ISAPI (Internet Services Application Programming Interface) によって定義された仕様に準拠しています。ISAPIテクノロジーは本来MicrosoftR社によってIISサーバ用に開発されましたが、NetscapeR、ApacheR、SambarR等の各種HTTPサーバと互換性があります。

NPH-CGI4D.EXEエクステンションは、CGI (Common Gateway Interface) 仕様に準拠しており、すべてのCGI互換サーバで使用できます。

これら2つのエクステンションは同じような働きをします。CGI互換はHTTPサーバで広く使用されていますが、CGIエクステンションのパフォーマンスは通常、ISAPIのものよりは劣ります。

動作方法

これらのエクステンションは次のように働きます。HTTPサーバ"A"はインターネット上にページを発行し、別のHTTPサーバ"B"はイントラネットで使用されている4D Serverであるものとします。この2つのサーバが通信できるようにするには、サーバ"A"の[Scripts]ディレクトリに、4DISAPIまたはNPH-4DCGIエクステンションを追加するだけです。

Webブラウザがサーバ"A"にリクエストを送信すると、サーバ"A"はURLを介し、4DISAPIまたはNPH-4DCGIエクステンションを使用してこのリクエストをサーバ"B"に転送します (通常、このエクステンションはサーバ"B"に対し、リクエストアイテムを含め、呼び出しの後に置かれたURL部分を転送します) 。その後、応答がブラウザに返されます。CGI名がNPH (No Parsing Header) で始まる場合、サーバは応答のHTTPヘッダを解析する必要はなく、CGIがフォーマットを行います。このエクステンションがHTTPリクエストや応答のボディを変更することはありません。

サーバ"A"への最初のリクエストは、ノーマルモードまたは暗号化モード (SSL) で送信することができます。2つのHTTPサーバと4DISAPI.DLLエクステンションとの通信は、非暗号化モードで行われます。

Note: 4DISAPIおよびNPH-4DCGIエクステンションは、4D Webサーバのコンテキストモードと互換性がありません。

次の図は、この原理を示しています:

・エクステンションはGET、HEADおよびPOSTメソッドを識別し、これらのメソッドは4Dより返される各種ステータス (200 OK、302 Moved Temporarily、404 Not Found等) を管理します。

4DISAPINPH-CGI4Dエクステンションを介し、HTTPレベルで認証を行うことはできません。これを行うには、HTMLフォームを使用する必要があります (暗号化接続で実行可能) 。

Note: これらのエクステンションは、ダイナミックデータの送受信、特にデータのpostを行えるように設計されています。ISAPIやCGIエクステンションを使用する際、ベーシックなWebページサービスでは良好なパフォーマンスが得られません。

インストールと環境設定

4DISAPIおよびNPH-CGI4Dエクステンションをインストールするには、4DISAPI.DLLまたはNPH-CGI4D.EXEファイルをHTTPサーバの[Scripts]フォルダにコピーします。

インストールしたエクステンションファイルはそれぞれ、環境設定ファイル (.INIファイル) とともに提供されます。.INIファイルには、エクステンションと同じ名前が付きます (例えば、4DISAPI.INI) 。エクステンションファイルと環境設定ファイルは同じフォルダに入れます。

HTTPサーバは、別の複数のHTTPサーバを対象とするように設定できます。この場合、HTTPサーバの[Scripts]フォルダには、対象となるサーバの数だけのエクステンションをコピーしてください。後はこれらのファイル名を変更するだけです ( 例えば、4DISAPI2.DLL、4DISAPI3.DLL等) 。その際、環境設定ファイルが各エクステンションに関連付けられており、その名前が正しいことを確認してください (4DISAPI2.INI4DISAPI3.INI等) 。

.INIファイルには、1つのセクション[Forward]が含まれます。[Forward]は以下のコマンドを許可します:

・TargetServer =

対象とするWebサーバのIP名またはIPアドレス (例えば、myserver.netや192.193.194.195) 。名前によって決定できない場合、この行をブランクのままにして、アドレスで対象サーバを決めることができます。

"localhost"名はアドレス127.0.0.1で識別されます。

デフォルトとしてアドレス127.0.0.1が使用されます。

・TargetPort =

対象サーバが使用するポート (例、81) 。デフォルトではポート番号8080が使用されます。

・Timeout =

サーバ応答の最大タイムアウト (秒単位) 。デフォルト値は30秒です。

・Allowed =

許可されるURLのリストで、コンマで区切られます。例えば、/pages, /imgの場合、/pagesおよび/imgで始まるURLにのみアクセスを許可します。サイト全体へのアクセスを許可するには、スラッシュ記号 (/) を入力します (デフォルト設定) 。

・Forbidden =

禁止されるURLのリストで、コンマで区切られます。例えば、/4DMETHOD, /pages2の場合、/4DMETHODおよび/pages2で始まるURLへのアクセスを禁止します。無制限のアクセスを許可するには、このリストに何も入力しないでください (デフォルト設定) 。

上記のルールの場合、以下のURLへのアクセスの可否は次の通り:

//document.htmlアクセス可
//onepage.htmlアクセス可
//picture.gifアクセス不可
//mypage.htmlアクセス不可
/<4dmethod/myprocアクセス不可

禁止されたURLが呼び出されると、エクステンションはエラー"HTTP/1.0 403 Forbidden"を直接返します。

エクステンションの使用

4DISAPIおよびNPH-CGI4Dエクステンションは、以下のURLをサポートします:

4D呼び出し (4Dはエクステンション名の後にあるURL部だけを受信):

http://server-address/cgi-bin/4disapi.dll/[Path]

http://server-address/cgi-bin/nph-cgi4d.exe/[Path]

エクステンションのチェック (リクエストのエコー):

http://server-address/cgi-bin/4disapi.dll/~~echo

http://server-address/cgi-bin/nph-cgi4d.exe/~~echo

エクステンションに関する情報 (テクニカルサポート):

http://server-address/cgi-bin/4disapi.dll/~~info

http://server-address/cgi-bin/nph-cgi4d.exe/~~info

以下の情報が返されます:

エクステンションの名前およびバージョン。例"Script name:4disapi.dll(6.7.0b1.2)"

エクステンションを呼び出しているサーバの名前およびバージョン。例"Server software:4D_v11_SQL/11.3.0"。

HTTPプロトコルのバージョン。例"Server protocol:HTTP/1.0"。

CGIプロトコルのバージョン。例"Gateway interface:CGI/1.1"。

対象サーバのチェック (サーバは使用可能か?) :

http://server-address/cgi-bin/4disapi.dll/~~target

http://server-address/cgi-bin/nph-cgi4d.exe/~~target

この答えは、次のいずれかになります:

"Good: target server reached.": 対象サーバは応答した (応答内容に関わらず)。

または "Bad: target server not reached.": 対象サーバが見当たらない、または応答がない。

この場合、以下の原因が考えられます:

- 環境設定ファイルが見つからない

- ターゲットアドレスまたはポートが正しくない

- ターゲットサーバが接続されていない

- ターゲットサーバはリクエストを受信したが、応答できない

参照

SET CGI EXECUTABLE, SET ENVIRONMENT VARIABLE.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次