pl: HTTP Downgrade auf 1.0

Hi,

mit PHP kein Problem, header("HTTP/1.0 200 OK"); wird vom Server geparst und die Response kommt mit Version 1.0.

Was jedoch muss ich in Perl senden? Ein print "HTTP/1.0 200 OK\n\n" führt zu einem 500er.

Bitte mal um Hinweise. MfG

Alternative: Wie bringe ich XHR/Ajax dazu, eine Response in HTTP/1.0 anzufordern?

  1. Nun ja. Ich habe in Perl und der Apache-API herumgesucht, aber wenn

    print "HTTP/1.0 200 OK\n\n";
    

    nicht geht, dann kann man Apache-seitig wohl zu "Special Purpose Environment Variables" greifen.

    1. Das muss gehen. Mit PHP gehts ja auch ohne dass ich am Apache was machen muss. Ein print "Status: 200" ergibt auch mit Perl einen Solchen obwohl Status: gar kein Header ist. Also muss es auch möglich sein die Version zu setzen, denn der Apache parst ja die Header die er kriegt. MfG

      1. Das muss gehen. Mit PHP gehts ja auch ohne dass ich am Apache was machen muss.

        Naja... was davon (Perl oder PHP) wird denn als Modul bzw. CGI ausgeführt? Und gerade Du solltest genau wissen, dass Versionsangaben bei solchen Fragen eine "nicht ganz unerhebliche Bedeutung" haben. Ebenso wie der konkrete Eintrag im Error-Log übrigens...

        Interessant dürfte für Dich folgendes sein:

        <?php
        header("HTTP/1.0 200 OK");
        print_r ( headers_list() );
        ?> 
        

        bringt (PHP als Modul ausgeführt) nur Array() als Ausgabe. In der Antwort steht dann (laut wget -d … ) dennoch HTTP/1.0 200 OK

        1. <?php
          header("HTTP/1.0 200 OK");
          header("X-Sonnenschein: No");
          header('Content-type: text/plain');
          var_dump(headers_list());
          ?>
          

          bringt als Antwort:

          array(2) {
            [0]=>
            string(18) "X-Sonnenschein: No"
            [1]=>
            string(38) "Content-type: text/plain;charset=UTF-8"
          }
          

          Demnach wird header("HTTP/1.0 200 OK"); irgendwie anders verarbeitet als andere header. Also musst Du Dich in der Apache-API bzw. der Perl-Api fpr Apache2 mal umsehen

          1. Demnach wird header("HTTP/1.0 200 OK"); irgendwie anders verarbeitet als andere header.

            So isses 😉

          2. Hi,

            da ein print "Status: 200" ja funktioniert und den Server dazu bringt den effektiven Status der Response auszugeben anstatt einen proprietären Header Status: 200 einzubauen, ist es naheliegend ein print "Protocol: HTTP/1.0" zu notieren. Leider erzeugt es einen proprietären Header Potocol: HTTP/1.0 anstatt ein Downgrade zu machen.

            Die von Dir verlinkte Perl API ist für mod_perl. MfG, schönen Abend

        2. Es ist die Frage wie der Server die Header parst die er bekommt. In PHP ist es z.B. so daß man HTP/1.0 oder HTTP/1.1 angeben muss wenn man einen bestimmten Status senden will. Dabei übernimmt der Server auch die angewiesene Protokollversion und sendet die Response mit dem angewiesenen Status in der angewiesenen Protocol-Version. MfG

  2. Was jedoch muss ich in Perl senden? Ein print "HTTP/1.0 200 OK\n\n" führt zu einem 500er.

    Benenn Dein "horst.pl" mal in "nph-horst.pl" um.

    1. nph ist nicht die Fage. Die Frage ist, was php mit header("HTTP/1.0 201 Created"); zum Server schickt. MfG

      1. nph ist nicht die Fage.

        Oh si, senior. Genau damit klappt es nämlich. Regina hat, wenn auch anders argumentiert, in dieselbe Kerbe geschlagen.

        1. nph heißt: Der Server parst die header nicht und er fügt auch spontan keine header hinzu. Was PHP jedoch offensichtlich immer macht, auch dann wenn header("HTTP..."); angewiesen wurde.

          PHP implementiert da für meine Begriffe einen Mischbetrieb, das wusste ich noch nicht.

          MfG, Schönen Abend.

          1. problematische Seite

            nph heißt: Der Server parst die header nicht und er fügt auch spontan keine header hinzu. Was PHP jedoch offensichtlich immer macht, auch dann wenn header("HTTP..."); angewiesen wurde.

            PHP implementiert da für meine Begriffe einen Mischbetrieb, das wusste ich noch nicht.

            Nachdem ich also erst rauskriegen musste wie PHP tickt, war mir klar daß meine Demo nur mit einem nph-script auf der Serverseite funktioniert ohne daß ich global die Kompression abschalten muß.

            MfG

            PS, der Vollständigkeit halber

            #!/usr/bin/perl
            
            # nph-echo.cgi
            # schickt die Datei zurück
            # Response Protocol HTTP/1.0
            
            use strict;
            use warnings;
            use bytes;
            
            binmode STDOUT;
            
            my $binary = '';
            while(read(STDIN, my $buffer,1024)){
                $binary .= $buffer;
            }
            
            my @header = (
                'HTTP/1.0 200 OK',
                'Content-Type: text/plain',
            );
            
            
            my $len = length $binary;
            push @header, "Content-Length: $len"; 
            
            
            print join("\r\n", @header), "\r\n\r\n$binary";