HTTP Status Code ohne CGI-Modul
Jonas
- perl
Hallo zusammen
Über print $cgi->header() kann ja der bekanntlich der Header eines Dokuments verändert werden - und damit auch die Status Codes.
Doch ist dies auch ohne CGI-Modul möglich? Direkt mit print oder ähnlichem?
Gruss und Dank
Jonas
Hell-O!
Über print $cgi->header() kann ja der bekanntlich der Header eines Dokuments verändert werden - und damit auch die Status Codes. Doch ist dies auch ohne CGI-Modul möglich? Direkt mit print oder ähnlichem?
Ja, indem du einfach print "Headername: Wert\n"; ausgibst, bevor der Header durch zwei Newlines abgeschlossen wurde.
Siechfred
Ja, indem du einfach print "Headername: Wert\n"; ausgibst, bevor der Header durch zwei Newlines abgeschlossen wurde.
Hmmm... irgendwie geht das so nicht.
Hane folgendes versucht:
print "HTTP Status Code: HTTP/1.1 404"
print "Content-type: text/html\015\012\015\012";
Ich bekomme aber trotzdem ein HTTP Status Code: HTTP/1.1 200 OK
Ja, indem du einfach print "Headername: Wert\n"; ausgibst, bevor der Header durch zwei Newlines abgeschlossen wurde.
Hmmm... irgendwie geht das so nicht.
Naja, dass du sowas willst:
print "HTTP Status Code: HTTP/1.1 404"
hast du ja nicht geschrieben (abgesehen davon, dass es völlig falsch ist). Wenn du print-Anweisungen mit HTTP-Headern ausgibst, nimmt der Webserver diese auf, parst sie und generiert daraus den HTTP-Header inklusive Statusline. Und genau diese Status-Line kannst du grundsätzlich nicht beeinflussen.
Du kannst aber in Perl so genannte "non-parsed header scripts" oder kurz NPH schreiben, siehe bspw. dieses Tutorial. Wichtig ist, dass dein Scriptname mit "nph-" beginnt, damit der Webserver weiß, dass es sich um ein derartiges Script handelt.
Siechfred
你好 Siechfred,
Du kannst aber in Perl so genannte "non-parsed header scripts" oder kurz NPH schreiben, siehe bspw. dieses Tutorial. Wichtig ist, dass dein Scriptname mit "nph-" beginnt, damit der Webserver weiß, dass es sich um ein derartiges Script handelt.
Das ist bei üblichen Webservern gar nicht nötig, da reicht es, einen Status:-Header zu schicken:
print <<HEADERS;
Status: 404 Not Found
Content-Type: text/html
HEADERS
再见,
克里斯蒂安
Hell-O!
Das ist bei üblichen Webservern gar nicht nötig, da reicht es, einen Status:-Header zu schicken:
Danke für die Info, mir waren bis jetzt nur diese NPH-Dinger bekannt. Da ich aber irgendwo mal gelesen habe, dass sie mit Vorsicht zu genießen seien, lasse ich praktisch besser die Finger davon :-)
Siechfred
你好 Siechfred,
Das ist bei üblichen Webservern gar nicht nötig, da reicht es, einen Status:-Header zu schicken:
Danke für die Info, mir waren bis jetzt nur diese NPH-Dinger bekannt. Da ich aber irgendwo mal gelesen habe, dass sie mit Vorsicht zu genießen seien, lasse ich praktisch besser die Finger davon :-)
Mit Vorsicht ist das insoweit zu geniessen, als dass man dadurch die "schützende Zwischenschicht Apache" vollständig ausschaltet. Man muss sich halt um den gesamten Header-Kram selber kümmern, der Apache macht da gar nichts mehr dran. Man braucht also deutlich mehr als nur das "ich weiss, dass ich da Content-Type: text/html\n\n schreiben muss"-Wissen.
再见,
克里斯蒂安
Danke an euch alle.. Habs geschafft:
print "Status: 404 Not Found\015\012";
Ziemlich dummer Fehler anfangs *schäm*
Gruss
Moin!
Danke für die Info, mir waren bis jetzt nur diese NPH-Dinger bekannt. Da ich aber irgendwo mal gelesen habe, dass sie mit Vorsicht zu genießen seien, lasse ich praktisch besser die Finger davon :-)
Nein, die funktionieren eigentlich recht gut - man benötigt sie aber wirklich nur dann, wenn man fortlaufend Ausgaben direkt an den Browser schicken will, beispielsweise um einen Fortschritt live zu dokumentieren (denn deren Ausgabe wird direkt und ohne Pufferung weggeschickt) - aber nicht, um den HTTP-Status zu ändern.
- Sven Rautenberg