Hallo,
ohne:
print "Content-type: text/html\n\n";
gibts sogar einen 500er, weil der Apache meint, er wisse nicht, was er für einen Content-type im Header senden soll.
was den HTTP-Status 500 betrifft, ist die Beobachtung zwar richtig; die Schlussfolgerung ist es jedoch nicht. Apache sendet nicht deswegen den Status 500 weil kein Content-Type-Header angegeben sei. Es wird der CGI-Standart schlichtweg nicht eingehalten, der zwischen durch den Webserver zu sendenden HTTP-Headern, die das entsprechenden Script bestimmen kann und dem eigentlichen Inhalt kein Trenner ist. Der Inhalt, der vom Script an den Server zum Senden übergeben wird, wird folglich durch den Server versucht als HTTP-Header zu parsen. Dieses schlägt fehl, was zum Status 500 führt.
Beispiele:
#!/pfad/zu/perl
#
# -falsch-
print "Huhu."
#!/pfad/zu/perl
#
# -richtig-
print "Content-type: text/plain\n\n";
print "Huhu."
#!/pfad/zu/perl
#
# -auch richtig-
print "\r\n";
print "Huhu."
Der Trenner besteht also in einer leeren Zeile. Die Spezifikation schreibt dazu ein CRLF vor. Übrigens wird auch ein einfaches \n durch Perl zu CRLF als Trenner umgewandelt.
Gruß aus Berlin!
eddi