Lin: mod_perl und HTTP-Header

Beitrag lesen

Hi,

Ich habe mehrere (teilweise Verständnis-) Fragen zu HTTP-Headern
und mod_perl.

Ich habe meine Site lokal auf meine Windows-Kiste entwickelt und nun
versucht auf dem Live-Server (Debian) zum laufen zu bringen.
So weit so gut.

-- System lokal --
Windows XP
Apache/2.0.54 (Win32)
mod_perl/2.0.2
Perl/v5.8.8

-- Live-Server --
Debian
Apache/2.0.54
mod_perl/1.999.21
Perl/v5.8.4

Mein mod_perl Setup:

  
<Files ~ "\.(html|pl|pm)$">  
    SetHandler perl-script  
    PerlHandler ModPerl::Registry  
    PerlSendHeader Off  
</Files>  

Nun geht es darum, wie ich die HTTP-Header korrekt versende.
Früher habe ich das über ein einfaches print gemacht:

  
print "Content-Type: text/html\r\n\r\n";  
print $content;  

Jetzt, unter mod_perl so:

  
my $r = shift if ($ENV{MOD_PERL});  
$r->headers_out->{'Content-Type'} = "text/html; charset=ISO-8859-1");  
print $content;  

Und bei einem Redirect:

  
$r->err_headers_out->add('Set-Cookie' => $app::objSession->getCookieCGI());  
$r->headers_out->set(Location => "http://www.example.com/");  
$r->status(Apache2::Const::REDIRECT);  

Alles unter mod_perl2 wohlgemerkt. Das ganze funktioniert auf dem Live-Server
mit mod_perl 1.999 nicht richtig. Zwar werden der Content-Type wohl gesetzt
(durch PerlSendHeader?), bloss das mit den Redirects functioniert nicht.
Seite bleibt weiss, in der error.log kommt nichts an.

Jetzt habe ich PerlSendHeader auf "On" gestellt und es wieder auf die
print-Methode umgestellt:

  
print "Location: http://www.example.com/\n\n";  

Nun meine Fragen:

1. Was genau macht PerlSendHeader? Hab ich mit "On" trotzdem die Möglichkeit,
HTTP-Status-Codes zu setzen (Apache2::Const::REDIRECT)?

2. Gibt es eine Methode, die in mod_perl 1+2 funktioniert? Bzw. wie würdet
ihr das Ganze angehen.

3. Wie kann ich auf einem Debian von mod_perl 1.999 auf 2.0.2 upgraden?
Meine Versuche mit der cpan-Konsole sind gescheitert, weil er sagt ich soll
zuerst meine alte mod_perl Version runterhauen, das konfliktverursachende
File + Verzeichnis seien 'Apache2.pm' und 'Apache2/*'.
Wenn ich die Sachen aber davor lösche, lässt sich Apache nicht neu starten,
weshalb die mod_perl-Tests fehlschlagen und es zu keiner Installation kommt.

4. Kann jemand meine Grad der Verwirrung reduzieren? Wird alles gut?

Danke für eure Antworten,
Lin

--
Mister rabbit says, "A moment of realization is worth a thousand prayers."