HTTP Downgrade auf 1.0
pl
- perl
- php
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?
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.
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
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
<?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
Demnach wird header("HTTP/1.0 200 OK"); irgendwie anders verarbeitet als andere header.
So isses 😉
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
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
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.
nph ist nicht die Fage. Die Frage ist, was php mit header("HTTP/1.0 201 Created");
zum Server schickt. MfG
nph ist nicht die Fage.
Oh si, senior. Genau damit klappt es nämlich. Regina hat, wenn auch anders argumentiert, in dieselbe Kerbe geschlagen.
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.
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";