Jonas: HTTP Status Code ohne CGI-Modul

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

  1. 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

    --
    Hier könnte Ihre Werbung stehen.
    Neue Freunde || Stramplerdesign
    1. 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

      1. 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

        --
        Hier könnte Ihre Werbung stehen.
        Neue Freunde || Stramplerdesign
        1. 你好 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

          再见,
           克里斯蒂安

          --
          Modifiziertes Code-Folding mit TextMate | Ich gehöre nun auch dazu…
          Treffen sich zwei Geraden. Sagt die eine: "Beim nächsten Mal gibst du einen aus."
          http://wwwtech.de/
          1. 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

            --
            Hier könnte Ihre Werbung stehen.
            Neue Freunde || Stramplerdesign
            1. 你好 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.

              再见,
               克里斯蒂安

              --
              Modifiziertes Code-Folding mit TextMate | Ich gehöre nun auch dazu…
              Fatal! Ich kann kein Reserve-Offizier mehr sein!
              http://wwwtech.de/
              1. Danke an euch alle.. Habs geschafft:

                print "Status: 404 Not Found\015\012";

                Ziemlich dummer Fehler anfangs *schäm*

                Gruss

            2. 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

              --
              My sssignature, my preciousssss!