Sven Rautenberg: Seite nicht auffindbar - Was tun?

Beitrag lesen

Moin!

Des weiteren wäre interessant: PHP gibts ja als Modul und als CGI. Perl wird praktisch nur als CGI betrieben. Hier gibt es meiner Ahnung nach verschiedene Interdependenzen zwischen dem Server und dem Prozess.

Wenn du ein Perlprogramm via CGI aufrufst, so ist der Aufruf allein bereits ein 200 Status wert. Woher kommt das? Es wird ja nicht vom Script extra eine Statuszeile geschrieben. Es ist (so meine Vermutung) Der Server, welcher den Response vorbelegt. Existiert das Script, und produziert es Output, dann ist das aus der Sicht des Servers ein 200er.

Ich habe schon versucht einen 404 Statuscode auszugeben, was aber fehl schlug (Fehler kann bei mir liegen). Es wurde brav 200 ausgegeben, wie das ja richtig ist. Solches Verhalten wäre mir auch erklärlich.

Es gibt Mittel und Wege, das auch mit Perl hinzukriegen, allerdings gibt es - richtig beobachtet - zwischen dem Perl-Skript und der letztendlichen Ausgabe an den Browser noch einige Zwischenschichten und Puffer, die an der produzierten Ausgabe herumwerkeln.

Meine Skripting-Anfänge haben vor Jahren auch mal mit Perl stattgefunden, und meine Erkenntnis aus dieser Zeit war folgende: Man kann auch mit Perl-Skripten "nackten, direkten" Zugang zum Browser erhalten, jedoch ist die Lösung dieses Problems alles andere als offensichtlich: Es hängt von der speziellen Benennung des Skripts ab! Wenn ein Skript mit den Zeichen "nph-" beginnt, ist es ein sogenanntes "non parsed header"-Skript und hat sich gemäß Definition zu 100% vollkommen selbst um das Senden geeigneter Header (inkl. Status) zu kümmern - dafür allerdings auch den Vorteil, dass keinerlei Ausgabepuffer den Datenfluß stören können.

Alle anderen Skripte kriegen durch die CGI-Umgebung von Perl eine Standardbelegung von Status und Headern vorgesetzt (bzw. teilweise nach Skriptende noch nachgereicht, wie z.B. Content-Length - schließlich wird die Skriptausgabe in einem Ausgabepuffer gehalten), und sämtliche vom Perl-Skript generierten HTTP-Header werden geparst und auf Korrektheit untersucht. Der Versuch, einen HTTP-Status einfach mit "HTTP/1.1 404 not found" zu printen, wird wohl von der CGI-Umgebung unterbunden. Vermutlich dürfte ein "Status: 404"-Header mehr fruchten... Aber für Perl-CGIs bin ich wirklich nicht der zu befragende Experte. :)

- Sven Rautenberg

--
"Love your nation - respect the others."