- ベストアンサー
CGI Error: タイトルタグの完全なセットを返さないというエラー
- Windows 2000 Professional上でIIS5.0を使用してCGIを作成していますが、CGI Errorが発生しています。
- ブラウザには「CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:」と表示されます。
- 以前の同様の質問への回答で「CGIの最初の出力に「Content-Type: text/html」と「1行の空白行」が必要」とありますが、これは実装されています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
CGIプログラムだったんですね。 アプリケーションマッピングは不要です。 仮想ディレクトリに実行アクセス許可と、 実ディレクトリのNTFSアクセス許可を設定してください。 もういちどこちら http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/ja-jp/Default.asp?url=/resources/documentation/windowsserv/2003/standard/proddocs/ja-jp/ca_configcgi.asp をよく読んでください。 マッピングが必要なのはcgiスクリプトの場合です。 NTFSアクセス許可は、プログラムを実行するすべてのユーザーに、ディレクトリに対する実行アクセス許可を与える必要があります。匿名ユーザーを受け付ける Web サイトでは、匿名ユーザー (IUSR_<コンピュータ名> アカウント) に、実行アクセス許可を与えます。 なお、IISを動作させているサーバにIIS Lockdown Wizard 2.1 ツールやURLScanをインストールしている場合、拡張子.exeのcgiが動作しないように設定が変えられている場合があります。 その場合は、それらをuninstallしてください。 IIS Lockdownツールを無効にする方法はこちらです。
その他の回答 (4)
- hisappy
- ベストアンサー率46% (184/392)
細かく推測していないので申し訳ないのですが、 エラーメッセージの内容と、質問文、補足文の感じから推測するに FTP(もしくはそれと同等の処理)の際のエラー が考えられます。 ひとまずは推測理由を述べます。エラーメッセージは 「CGIが生成したヘッダが奇麗な形式でない。」(推定) と言っています。 このことから ・環境移行の際に適切な形式でファイルの移動が行われなかった。 ・ヘッダに関してインクルードされているファイルの中身が不正である。 ということが考えられ、まずはこの点に捜索範囲を狭めることができます。 ここでカギとなるのが、質問文にあります 「CGIの最初の出力に『Content-Type: text/html』と『1行の空白行』が必要」 とありましたが、これについては入っていました。 の記述です。 エラー内容と、この記載内容の具合から FTP(もしくはそれと同等の処理)の際にバイナリ形式で格納すべきところを テキスト形式(もしくはそれに準じた形式)で格納してしまった。 そのためHTTPヘッダの情報を格納しているファイルの中身が改ざんされてしまい 結果、CGIがキックされた時に生成されるヘッダの終端が不正な形式となった。 と推測できるしだいであります。 ちなみにjava scriptはクライアントサイドで実行され、サーバ上で実行されることはありません。 また呼出元のファイルもURLがhttp://で読み出されていないと、 呼び出されるCGIが正しく動作しない場合があります。 ご確認と続報、よろしくお願いします。
補足
ご回答ありがとうございます。 現在アクセス権、マッピングを中心に確認しております。 ご指摘の点はテキスト出力ではなく、たとえばバイナリ形式では?ということと思われますが、 以前の動作していた環境より変更を行っていない部分であるため、出力形式のミスではないようです。 ご意見、ご回答ありがとうございます。
- suzui
- ベストアンサー率67% (199/297)
>cgiで使用の言語はJavaScriptです。 >JavaScriptにてc++で作成の実行ファイルを呼び出し、 >処理結果をJavaScriptで出力しております。 と書いてあったので、CGIがスクリプト(言語はJavascript)で書かれているのかと思いましたが、実行ファイル(.exe)なんでしょうか? CGIというのはサーバ側で実行されるスクリプトもしくはプログラムなんですが、どちらでしょうか。 調べるときに混同しないでいただきたいのは、スクリプトが実行されるのがクライアント側かサーバ側かということです。意味がまったく異なるので・・・ 少なくともクライアント側またはサーバ側のどちらかでJavascriptをお使いのようなので、クライアントから呼び出しているURLを調べてください。どんなURLですか? CGIスクリプトの場合の例: http://example.com/sample.cgi?param1=value1 http://example.com/sample.js?param1=value1 CGIプログラムの場合の例: http://example.com/sample.exe?param1=value1 どちらの場合でも、IISの設定の仕方はこちらをよく読んで下さい。 http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/ja-jp/Default.asp?url=/resources/documentation/windowsserv/2003/standard/proddocs/ja-jp/ca_configcgi.asp CGIスクリプトの場合はアプリケーションのマッピングが必要になります。スクリプトでJavascriptやVBscriptを言語として利用している場合は、場合によってはこちらの作業が必要になる場合もあります。 http://support.microsoft.com/default.aspx?scid=kb;ja;261205 CGIプログラムの場合は、プログラムを格納している仮想ディレクトリに(IIS上で)実行アクセス許可が必要です。質問内容を見る限りウィザードで正しく作成されているようですが、確認してください。また、当該ディレクトリのNTFSアクセス権についても確認してください。
補足
返信が遅くなり申し訳ありません。 私の理解の浅さと説明不足で混乱を招きすみません。 クライアント側より呼び出しのURLはWEBサーバのマシン名でhttp://マシン名/と入力すると Default.htmが表示されます。 当システムはWEB上で検索条件を入力し検索ボタンを押下することによりサーバ上のデータベースを検索し 結果を返すシステムとなっております。 HTMLでは <!--検索ボタン--> <!--<image src="/images/kensaku.gif" OnClick ="execute()"> --> <a href="JavaScript:execute()"><image src="/images/kensaku.gif" border="0"></a> </td> <td width=34% align=right> となっております。 そして検索のJavascriptファイルがFind.jsという名前であり、その中で(一部抜粋) function ExecCGI() { var form = top.upper_frm.document.menu_form; var field_chk = fieldChk(form); top.upper_frm.document.send_form.sql.value = "all"; var cgi_name = "/cgi-bin/FindList.exe"; top.upper_frm.document.send_form.action = cgi_name; top.upper_frm.document.send_form.submit(); return; } と実行ファイル(.exe)を呼び出しております。 サーバにて実行ファイルを実行し検索結果としてHTMLを作成し表示しております。 ご指摘いただきましたIISの設定、マッピング、NTFSアクセス権について確認いたしました。 マッピングを拡張子exeを追加し、パスと動詞はaspと同様にしたところ CGIエラーのメッセージが出ずに、検索中に表示するよう指定されている「検索中」メッセージが表示されます。 ただし、いつまでたっても結果は表示されず、実行ファイルが起動すると出力されるログも出力されません。 ローカルパスとなっているパスのNTFSアクセス権を確認したところ規定のWEBサイトで、このフォルダを共有しないとなっていたため、 このフォルダを共有するにチェックしエイリアスは同じ名前だと入力できないため別名にて確定しました。 しかし、結果に変化はありませんでした。 これほどわかりやすく回答いただきましてありがとうございます。 また、私が及ばずいまだ解決せずに申し訳ありません。 もう少しお付き合いいただければ幸いです。
- suzui
- ベストアンサー率67% (199/297)
cgiのファイル名の拡張子は何ですか? その拡張子に対して、IISでアプリケーションのマッピングはどのようになっていますか? 確認の方法: http://www.microsoft.com/windows2000/ja/advanced/iis/default.asp?url=/windows2000/ja/advanced/iis/htm/core/iiwarndf.htm cgiファイルの先頭の1行目の内容は何ですか? 差し支えなければ教えてください。とりあえずこれだけあれば追試できるかな・・・
補足
お忙しい中たびたび回答ありがとうございます。 はじめのJavaScriptにて呼び出しの実行ファイル名の拡張子はexeです。 ご指摘の確認方法にてマッピングの確認をいたしましたが、exe拡張子はありませんでした。 cgiファイルの先頭1行目の内容というのは どのように確認すればよいのでしょうか? また、マッピングを行おうと思ったのですが、 すでに追加されているマッピングは実行ファイルのパスが dllとなっているものばかりですが、 私の場合、exeのパスを指定して拡張子はexeでよいのでしょうか? 丁寧な回答をいただいていながら ご期待に沿えずに申し訳ありません。 よろしくお願いします。
- suzui
- ベストアンサー率67% (199/297)
以前別の環境で動作していたとありますが、以前の環境は何ですか? それからcgiで使っているスクリプト言語は何ですか? サーバ上でcgiを素で実行してエラーは出ますか?
補足
返信が遅くなってしまいすみません。 以前の環境については詳細はわからないのですが、 どうも同じ Windows 2000 Professionalといわれております。 service packについては不明です。 cgiで使用の言語はJavaScriptです。 JavaScriptにてc++で作成の実行ファイルを呼び出し、 処理結果をJavaScriptで出力しております。 サーバ上で本来はJavaScriptで呼び出す実行ファイルを 素で実行すると引数がないためエラーとなりますが、 その場合ログが出力され、起動が確認できます。 しかし、JavaScriptにて引数を渡して呼び出すとログも出力されません。 お忙しいところ申し訳ありませんが よろしくお願いします。
お礼
長い間ご丁寧に回答いただきましてありがとうございました。 おかげさまでCGIプログラムが処理結果を返してログも出力されました。 IISのローカルフォルダのプロパティ-ディレクトリ セキュリティ-匿名アクセスおよび認証コントロールの編集にて 匿名アクセスにチェックし、(IUSR_<コンピュータ名> アカウントをパスと設定しました。 IISによるパスワードの管理を許可するにはチェックをいれずにテストしました。 残念ながらテスト環境の不備で正常結果は返ってきませんでしたが、ログも出ており山は越えたようです。 suzui様にはなんとお礼をしたらよいか・・・ 理解の悪い私に対して、親切に回答いただきまして、本当にありがとうございました。 私もいつかsuzui様のように回答できるようにがんばります。 大変お世話になりました。