500:来自 CGI 程序的内部服务器错误

Zam*_*ues 3 bash html cgi apache-httpd

我正在尝试编写一个从 HTML 页面调用的 CGI 程序。CGI代码片段如下:

 #!/bin/bash
 echo "Content-type: text/html"
 echo  "<html>"
 echo "<body>"
 echo "Hi"
 echo "</body>"
 echo "</html>"
Run Code Online (Sandbox Code Playgroud)

但是在执行脚本后,我可以看到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
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 13

正如 HTTP 规范(以及来自您的 HTTP 服务器的错误消息)所指定的,您需要在 HTTP 标头和正文之间留一个空行,否则服务器不知道标头在哪里结束,正文从哪里开始。来自RFC 2616(强调我自己的):

请求(第 5 节)和响应(第 6 节)消息使用 RFC 822 [9] 的通用消息格式来传输实体(消息的有效负载)。两种类型的消息都包含一个起始行、零个或多个头字段(也称为“头”)、一个空行(即在 CRLF 之前没有任何内容的行)指示头字段的结尾,可能还有一个消息体

要解决此问题,请echo在 之前放置另一个echo "<html>",以便标题与正文明显分开。