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>"