我有一个通过Ajax调用的perl脚本。它只是将3个值写入数据库。代码工作正常(值写得成功)但我得到一个“内部服务器错误”抛出。 Errorlog表示“脚本标题过早结束”。
应用程序没有问题 - 它可以按需运行并且有几个月 - 但是在测试其他内容时我通过Firebug注意到了错误。
所以我开始从脚本中剥离perl以试图找到问题..并继续直到我只剩下两行... shebang并退出..我仍然得到500错误。直接从浏览器运行脚本会在浏览器窗口中显示500错误...从命令提示符中它很好 - 即。 apache errorlog中没有任何内容。
服务器配置没有任何问题 - 它有数百个perl脚本并且已运行多年。
答案 0 :(得分:8)
您应首先输出有效的CGI标头。
服务器期望CGI脚本的第一个输出是CGI标头。通常情况下,这可能与print "Content-type: text/plain\n\n";
或CGI.pm及其派生词print header()
一样简单。
答案 1 :(得分:3)
如果您正在写入数据库并且不需要将任何内容发送回客户端,则正确的响应是状态204:
print "Status: 204 No Response\n\n";
这使服务器感到高兴,因为它发送了一个完整的标头集,并告诉客户端请求是成功的,并且没有要处理的响应主体。