- ベストアンサー
Apacheの設定でJavaScriptのエラーが発生する
- ローカルのマシンにApacheを設定後、テストのために簡単なJavaScriptを含んだhtmlファイルを読み込もうとしたところ「Premature end of script headers」エラーが出ました。
- 調査しても解決できず、困っています。どなたかご教授頂ければ幸いです。
- Apacheの設定ファイルを確認しましたが、mime.typesやScriptAliasなどは正しく設定されているようです。
- みんなの回答 (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もありません。
その他の回答 (1)
- yyr446
- ベストアンサー率65% (870/1330)
一般的な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がエラーを吐くっじゃないかと思います。 抜本的に何をされたいのか解らないので、あしからずの回答です。
補足
私の拙い質問にご丁寧に回答いただき誠にありがとうございます. 目的は以下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 のエラーが発生し,表示がされません. 初心者のため,勘違い等々あるかと存じますが, 何かおかしいところがありましたら,ご教授いただければと存じます. どうかよろしくお願いいたします.
補足
> 特定ディレクトリ(この場合は/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もありません。 アドバイスありがとうございます. 少しずつ勉強したいと思います. ご回答ありがとうございました.