2012-04-15 5 views
0

Ich versuche, eine Perl-Seite zu schreiben, die eine HTTP 302-Antwort an einen anderen Ort zurückgibt und einen benutzerdefinierten Header zu dieser Antwort hinzufügt. so sollte meine gewünschte HTTP-Antwort so etwas wie dieses:Hinzufügen eines Antwortheaders zu 302 Antwort mit Perl

HTTP/1.1 302 Moved 
Date: Sun, 15 Apr 2012 10:59:02 GMT 
Server: Apache 
Location: http://www.google.com 
Content-Length: 396 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=iso-8859-1 
CUSTOM_HEADER: CUSTOM_VALUE 

Ich habe versucht, CGI:

#!/bin/perl 

use strict; 
use APR::Request::Apache2; 
my $r = shift; 
$r->content_type('text/html; charset=utf-8'); 
$r->headers_out()->add("CUSTOM_HEADER", "CUSTOM_VALUE"); 
$r->headers_out()->add("Location", "http://www.google.com"); 
$r->status(302); 

, und ich tue 302 Antwort erhalten Google, aber kein custom_header. Sobald ich den Status von $r->status(200); auf 200 ändere, bekomme ich den CUSTOM_HEADER. Also, was ist mit diesem Verhalten? Wie kann ich meinen Header zur 302 Antwort hinzufügen?

Antwort

2

Verwenden $r->err_headers_out->set oder $r->err_headers_out->add

my $r = shift; 

$r->content_type('text/html; charset=utf-8'); 
$r->err_headers_out->set(Location => "http://www.google.com"); 
$r->status(302); 
+0

Dank für Ihre Hilfe. Übrigens, warum wird 302 als Fehlerreaktion betrachtet? – Oded

+0

@Oded - Gute Frage. Ich habe Ihren Punkt :) Statuscodes 1xx sind informativ, 2xx Erfolg, 3xx Umleitung, 4xx Client Error und 5xx Server Error. 302 ist also kein Erfolg, kein Fehler. Also was ist es? In diesem Fall ist es für dieses Modul und die Funktionalität ein Fehler. Frag nicht warum :) –

2

Sie sollten err_headers_out() verwenden. Diese werden auch bei Fehlern und Weiterleitungen gedruckt.