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>",以便标头与正文清晰分开。

相关内容