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
HTTP仕様(およびHTTPサーバーからのエラーメッセージ)で指定されているように、HTTPヘッダーと本文の間に1行の空白行が必要です。から RFC 2616 (私自身を強調):
要求(セクション5)および応答(セクション6)メッセージは、エンティティ(メッセージのペイロード)を転送するためにRFC 822 [9]の一般的なメッセージ形式を使用します。どちらのタイプのメッセージも、開始行0個以上のヘッダーフィールド(「ヘッダー」とも呼ばれます)、空の行(つまり、CRLFの前に何もない行)で構成されます。ヘッダーフィールドの終わり、場合によってはメッセージ本文。
この問題を解決するには、echo "<html>"
の前に別のecho
を置き、ヘッダーが本文から明確に分離されるようにします。