500:CGIプログラム内部サーバーエラー

500:CGIプログラム内部サーバーエラー

HTMLページから呼び出されるCGIプログラムを作成しようとしています。 CGIコードの断片は次のとおりです。

 #!/bin/bash
 echo "Content-type: text/html"
 echo  "<html>"
 echo "<body>"
 echo "Hi"
 echo "</body>"
 echo "</html>"

500:Internal Server Errorただし、スクリプトを実行した後はブラウザのページを表示できます。 。

エラーログファイルには次のものがあります。

[Wed Apr 09 18:36:59 2014] [error] [client 127.0.0.1] malformed header   
from script. Bad header=<html>: image.sh
[Wed Apr 09 18:37:14 2014] [error] [client 127.0.0.1] malformed header 
from script. Bad header=<html>: image.sh

答え1

HTTP仕様(およびHTTPサーバーのエラーメッセージ)で指定されているように、HTTPヘッダーと本文の間に空白行が必要です。そうしないと、サーバーはヘッダーが終了し、本文が始まる場所を知ることができません。 ~からRFC 2616(強調):

要求(セクション5)および応答(セクション6)メッセージは、RFC 822 [9]の共通メッセージ形式を使用してエンティティ(メッセージのペイロード)を送信します。どちらのタイプのメッセージにも出発線が含まれています。ゼロ個以上のヘッダーフィールド(「ヘッダー」とも呼ばれる)、ヘッダーフィールドの終わりを表す空行(つまりCRLFの前に何もない行)、およびメッセージ本文(可能な場合)

この問題を解決するには、ヘッダーが本文のテキストとはっきりと区別されるように、echo前に別のものを配置します。echo "<html>"

関連情報