Apacheの設定でJavaScriptのエラーが発生する

このQ&Aのポイント
  • ローカルのマシンにApacheを設定後、テストのために簡単なJavaScriptを含んだhtmlファイルを読み込もうとしたところ「Premature end of script headers」エラーが出ました。
  • 調査しても解決できず、困っています。どなたかご教授頂ければ幸いです。
  • Apacheの設定ファイルを確認しましたが、mime.typesやScriptAliasなどは正しく設定されているようです。
回答を見る
  • ベストアンサー

javascriptとApacheの設定

ローカルのマシンにApacheを設定後, テストのために簡単な javascript を含んだhtmlファイルをfirefoxから読み込もうとしたところ "Premature end of script headers" が出ました. 自身で調査しましたが,どうしても解決できません. 非常に困っております.どなたかご教授頂ければ幸いです. 【環境】 [OS]   Ubuntu 10.04 LTS [Apache] Version 2.2.14 (Ubuntu) [Apacheの設定] 初期設定でapache2.conf から (1) httpd.conf, (2) sites-available/default等が include されます. (2)のファイルのみ以下を変更しました: DocumentRoot /home/hoge/www/ ScriptAlias /cgi-bin/ /home/hoge/www/cgi-bin/ <Directory "/home/hoge/www/cgi-bin/"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> また mime.types には次の記述があります. application/javascript js text/x-perl    pl 【テストファイルの内容】 index.html 644 ************************************************************ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html> <head> <title>Test Example</title> <script type="text/javascript" src="/cgi-bin/test.js"></script> <script type="text/x-perl" src="/cgi-bin/first.pl"></script> </head> <body> TEST </body> </html> ************************************************************ /home/hoge/www/cgi-bin/first.pl 755 *************************************** #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; *************************************** /home/hoge/www/cgi-bin/test.js 755 *************************************** document.write("Content-type: text/html<br><br>"); document.write("Hello World!"); *************************************** 【エラーの再現手順】 Firefox 3.6.13 から (1) http://localhost/test.html とした場合 TESTを出力しログにエラー [error] [client 127.0.0.1] Premature end of script headers: test.js, referer: http://localhost/test.html (2) http://localhost/cgi-bin/first.pl (出力正常) (3) http://localhost/cgi-bin/test.js (Internal Server Error) perl は大丈夫なのですが js がエラーになります.

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

  • ベストアンサー
回答No.2

<Directory "/home/hoge/www/cgi-bin"> SetHandler cgi-script </Directory> どこかにこの項目がありませんか? 特定ディレクトリ(この場合は/home/hoge/www/cgi-bin)内の「全てのファイル」を CGIスクリプトと見なして実行する設定です。 そのディレクトリ内のtest.jsもCGIスクリプトと見なして実行しようとしますが、 #!/usr/bin/perlなどの記述もなく、実行形式のファイルではありませんから、Internal ServerErrorになります。 SetHandlerをコメントアウトするか、削除する、(別途、拡張子.plや.cgiファイルをCGIスクリプトとして実行させる設定が必要です。) または、 test.jsファイルをcgi-binディレクトリ以外の場所に入れて、HTMLのsrc属性もそれにあわせて変更してみて下さい。 追伸。 JavaScriptの文法や、PerlとJavaScriptの連携はまた別問題ですので、JavaScriptはJavaScriptとして勉強して下さい。 text/x-perlというtypeもありません。

ts307
質問者

補足

> 特定ディレクトリ(この場合は/home/hoge/www/cgi-bin)内の「全てのファイル」を > CGIスクリプトと見なして実行する設定です。 > > そのディレクトリ内のtest.jsもCGIスクリプトと見なして実行しようとしますが、 > #!/usr/bin/perlなどの記述もなく、実行形式のファイルではありませんから、Internal > ServerErrorになります。 ご指摘ありがとうございます. おっしゃる通り私は js ファイルを実行しようとしておりました. ここに大きな勘違いがあったように思います. apache 設定ファイルの中の mine.conf にて "AddHandler cgi-script .cgi .pl .js" の記述がありましたのでこれを削除し,js を格納するディレクトリを新たに作成することによって, 正常に apache 経由で表示させることができました. > JavaScriptの文法や、PerlとJavaScriptの連携はまた別問題ですので、JavaScriptは > JavaScript として勉強して下さい。text/x-perlというtypeもありません。 アドバイスありがとうございます. 少しずつ勉強したいと思います. ご回答ありがとうございました.

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

一般的なWebサーバーの構成で考えると、ご提示のindex.htmlをFirefoxがレンダリングした後のHTMLは、 <html> <head> <title>Test Example</title> <script type="text/javascript"> Hello, World. </script> <script type="text/x-perl"> document.write("Content-type: text/html<br><br>"); document.write("Hello World!"); </script> </head> <body> TEST </body> </html> みたいなイメージになって、head部にdocument.writeしても表示に関係ないし、 firefoxで<script type="text/x-perl">のscriptが動くという話も私は、知らないし 結局表示は TEST のみだと思います。 Webサーバー側でjavascriptを実行させる仕組み準備してるんですか! それにしてもサーバー側でdocument.writeは無いと思いますよ。 (サーバー側でdocumentは何をさすのやら非常に疑問です) first.pl の方はちゃんとWebサーバー側で動作してますね。ブラウザーからの <script type="text/x-perl" src="/cgi-bin/first.pl"></script>のGET送信 に対して、/cgi-bin/first.plが実行され、テキストの Hello, World. がレス ポンスされ、ブラウザー側がその<script>要素のソースとして解釈すると思います。 ただ、firefoxで<script type="text/x-perl">でperlのスクリプトが動くとしても ソースが Hello, World. じゃ無意味なような.... test.js の方はcgi-bin/の中にあるんで、Webサーバー側が無理やり実行しよう として、サーバー側でエラーになって"Premature end of script headers" を テキストとしてレスポンスし、javascriptがエラーを吐くっじゃないかと思います。 抜本的に何をされたいのか解らないので、あしからずの回答です。

ts307
質問者

補足

私の拙い質問にご丁寧に回答いただき誠にありがとうございます. 目的は以下URLにあるサンプルをローカルPC上でテストすることです. http://cytoscapeweb.cytoscape.org/tutorial これまで, 1.パスを適切に設定し,firefox からファイルを直接読みに行くとサンプルを正常に表示できることは確認しました. 2.しかしローカルPC上にApacheを設定・起動し,http://localhost/で読みにいくと js ファイルに対して premature のエラーが発生しました. 3.サーバの設定に問題があると考え,いろいろ試行錯誤するうちに簡単なソースのほうが設定の間違い探し・切り分けに適当かと考え先の質問のファイルを作成するにいたりました(perlはcgiの動作を確認するためにテストしました).ご指摘を受けtest.html,test.jsを以下のように修正してみました: *** test.html *** <html> <head> <title>Test Example</title> <script type="text/javascript" src="/cgi-bin/test.js"></script> </head> <body> <script type="test/javascript"> <!-- exf(); //--> </script> TEST </body> </html> *** test.js (755) *** function exf() { var date=document.lastModified; document.write(date); } ただ,このようにしても, [error] [client 127.0.0.1] Premature end of script headers: test.js, referer: http://localhost/test.html のエラーが発生し,表示がされません. 初心者のため,勘違い等々あるかと存じますが, 何かおかしいところがありましたら,ご教授いただければと存じます. どうかよろしくお願いいたします.

関連するQ&A

  • Apacheの設定について

    WindowsXP SP2 のローカルでCGIを動作させるために  http://www.adminweb.jp/apache/ を参考に下記を試みました。 (1)Apache ダウンロード・インストール・接続確認   「http://localhost/」へアクセスして「It works!」表示確認    (htdocs ディレクトリの index.html) (2)ActivePerlインストール    perl -v perl -h で動作確認 (3)CGI用エイリアスの設定    ScriptAlias /cgi-bin/ "C:/SERVER/Apache/cgi-bin/" (4)以下の test.pl を C:/SERVER/Apache/cgi-bin/ に設置    ------------------------------------------------------    #!C:/Perl/bin/perl.exe print "Content-type: text/html;\n\n"; print "<html><body><h1>test cgi</h1></body></html>\n";   -------------------------------------------------------    http://localhost/cgi-bin/test.pl の実行で    「Internal Server Error」になってしまいます。 どこの設定が間違っているのか見当がつきません。 何卒ご指導宜しくお願い致します。

  • apacheの mod_rewite の設定方法について

    Apacheの mod_rewrite の設定方法についてお聞きしたい事があります。 Perl等のURL その(1) http://localhost/cgi-bin/dir1/dir2/dir3/file.cgi?para='test'              |__________dir_________||__file_||__パラメータ_| というURLがあるとします。↑ 上記のディレクトリをパラメータとしておく場合↓ Perl等のURL その(2) http://localhost/cgi-bin/hoge.cgi?dir=/dir1/dir2/dir3/file.cgi?para='test'              |_別のファイル-||_______上記のdirとfileとパラメータ ------| という事を行いたいのですが、mod_rewriteをどのように設定すればいいのかが よくわかりません。 すいませんが、誰か教えていただけないでしょうか。

    • ベストアンサー
    • Perl
  • apacheのCGI設定について教えてください。

    CGIの勉強のために、古いパソコンに fedora core 4 をインストールしてapache でローカルのテスト用サーバーにしようとしています。 /var/www/html に設置した簡単な perl CGI は動くのですが、同じものをユーザーのホームディレクトリに設置すると、internal server error になってしまいます。 ***** 以下 httpd.confの抜粋です。***** #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride All Options Includes ExecCGI FollowSymLinks SetHandler cgi-script </Directory> AddHandler cgi-script .cgi .pl ************************************** サーバーのエラーログを見ると Premature end of script headers: test.cgi となっています。htmlをprintしているだけのスクリプトで、/var/www/html では動くので、apache の設定の問題かと思っています。 ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • apacheでcgiがうまく動かない。cgiが認識されていない?

    すいません、多分基本的な所なのですが、 どうしても分からないので質問させてください。 ■環境------------------------------ ・windowsXP sp2 ・apache1.3.33 C:\Program Files\Apache Group\Apache  現在の状態:html表示可能。httpd.confを変更 ・perl5.6.1 c:\perl  現在の状態:PPMにてimagemagick,DBI,DBD-MySql(だっけ)をインストールしている ・php5.0.4 c:\php ・mysql4.02 C:\mysql ■httpd.confの変更箇所-------------------------------- 337 Options Indexes FollowSymLinks MultiViews ↓ Options Indexes FollowSymLinks ExecCGI MultiViews 538 #!c:/program files/perl/perl ↓ #!C:/Perl/bin/perl 720以降に追加 AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl 825以降に追加 AddHandler cgi-script .cgi AddHandler cgi-script .pl ■printenv.plの内容-------------------------------- #!C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } -------------------------------------------------- 上記のような環境で、いまPERLの動作確認を行っています。 http://localhost/cgi-bin/printenv.pl http://localhost/cgi-bin/printenv.pl PLファイルを指定しても実行されず、ダウンロードされてしまいます。 cgiに拡張子を変えても同じでした。 エラーというわけでもない為、エラーログにも何もかかれません。 何が問題なのでしょうか?

    • ベストアンサー
    • CGI
  • apache1.3とperlでCGI

    超初心者です。 windows XPでapache1.3 と active perl 5.1.2をインストールして、 CGIを動作させたいと考えています。 http://localhostを入力してapacheの起動画面は表示されていること を確認しました。 その後httpdconfに下記を追加しました。 AddHandler cgi-script .cgi .pl AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl <Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> C:\Program Files\Apache Group\Apache\cgi-binに既存で存在する printenv.plを実行しようとするとファイルのダウンロードの画面が出てきて 実行されません。printenv.plは下記のようにperl.exeへのパスだけ変更しました。 #! C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } どうすればCGIが実行できるようになるのでしょうか? ご教授ください。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • Linux7.2のApacheのCGIについて

    CGIを作成してアクセスしたところInternalServerErrorとなってしまいました エラーログを参照したところ Premature end of script headers; /home/tenchan/public_html/cgi-bin/test.cgi となっていました。 原因がわからず困っておりますもしおわかりの方いらっしゃいましたら教えてください。 アパッチの設定は以下の点を修正しました AddHandler cgi-script .cgiのコメントをはずしました <Directory "/home/*/public_html/cgi-bin"> Options ExecCGI </Directory> test.cgiの内容は #!/usr/bin/perl print "Contetnt-type: text/html\n\n"; print "<HTML><BODY>Hello</BODY></HTML>"; です コンソールで実行した際には「Hello」と表示されたので test.cgiには問題はないと思います また、Linux上で作成しましたので改行コードなどの問題はないと思うのですが 何か参考になるようなアドバイスありましたらよろしくお願いします。

  • apacheの設定について

    先日red hat linux8(雑誌の付録)を購入し、apacheを試しているのですが。 http://localhost/やhttpd://localhost/~ユーザー名/にはアクセスできるのですが。 http://localhost/manual/index.htmlやhttpd://localhost/cgi-bin/にアクセスしようとすると「302 found」と出てしまいます。 ちゃんとmanualやcgi-binのフォルダはあるのに... どなたか、教えてください。 apacheのバージョンは2.0.4です。 お願いします。

  • firefox+xhtml+javascript

    お世話になっております。 divをweb上でドラッグできるスクリプトを組みました。 Opera9.6,IE6では動いているのですが、Firefoxでは、ある条件下でしか動きません。 ある条件とは、DOCTYPEの宣言がされていないことで、XHTMLにしようとDOCTYPEを宣言すると、動作しなくなってしまいます。 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='ja'> <head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /> <meta http-equiv='Content-Script-Type' content='text/javascript' /> <title>test</title> <script type='text/javascript' src='FILENAME.js'></script> -------- <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'> を消せば動きます。 仮に、DOCTYPEをHTML4.1などにしても動きません。 クオートをシングルからダブルにしても同じです。 動かない状態でも、JS自体は読んで、onload関数の中は見に行っているようです(alertを埋め込んだらでたので) 可能性として、 外部ファイルのJSの書き方に問題があるのでしょうか? それとも、HTML側に問題があるのでしょうか? ソースを見なくても何か考えられることがあれば、教えてください。 よろしくお願いします。

  • Apache2.2でPerlを呼び出すSSIを使ったHTMLをloca

    Apache2.2でPerlを呼び出すSSIを使ったHTMLをlocalhostで動かそうとしています。 AddHandler cgi-script .cgi .plに変更。 exec cmdをHTMLファイルに埋め込みました。 <!--#exec cmd="/PROGRA~1/APACHE~1/Apache2.2/cgi-bin/counter.pl counter"--> インターネットのApacheでSSIを使う方法を読み,httpd.confの中に Options FollowSymLinks Multiviews の後にIncludesをつけ   AddType text/html .shtml と   AddHandler server-parsed .shtml を加えました。しかし、localhostで実行するとHTMLのSSIの部分だけ表示されません。 (アクセスカウンターのカウンターだけ表示されません)。エラーログには ”指定されたファイルが見つかりません。 : don't know how to spawn cmd child process: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/counter.shtml” と記録されていました。 どうしたらよいのでしょうか。 どなたか解決できるかた、回答よろしくおねがいします。

    • 締切済み
    • CGI
  • activeperl5.6が起動できない

    activeperl5.6が動きません。 activeperlをインストールして、apacheのhttpd.confの中身を本を参考に編集しました。 sampleのhello.plというファイルを自分の環境ではc:\www\cgi-binというフォルダーの中にいれ、 ScriptAlias /cgi-bin/ "C:/www/cgi-bin" <Directory "C:/www/cgi-bin"> AllowOverride None Options None AddHandler cgi-script .cgi .pl でcgiの実行を許可して AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl で拡張子とperlを関連付けています。 browserからたとえばhttp://localhost/hello.plを入力すると 実行が許可されていないとブラウザーで表示されます。 Forbidden You don't have permission to access /test.pl on this server. Apache/1.3.39 Server at localhost Port 80 アパッチのエラーログを見ると、 [error] [client 127.0.0.1] couldn't spawn child process: c:/

    • ベストアンサー
    • CGI

専門家に質問してみよう