我正在尝试编写一个从 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>"
,以便标头与正文清晰分开。