2012-04-15 3 views
0

Я пытаюсь написать страницу perl, которая возвращает ответ http 302 в другое место и добавляет настраиваемый заголовок к этому ответу. поэтому мой желаемый ответ HTTP должно быть что-то вроде этого:Добавление заголовка ответа в ответ 302 с использованием 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 

я попытался с помощью 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); 

и я получаю 302 ответа не Google, но не CUSTOM_HEADER. как только я меняю статус на 200 на $r->status(200);, я получаю CUSTOM_HEADER. так что с этим поведением? как я могу добавить заголовок в ответ 302?

ответ

2

Использование $r->err_headers_out->set или $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

спасибо за вашу помощь. кстати, почему 302 рассматривается как ответ об ошибке? – Oded

+0

@Oded - Хороший вопрос. Я получил вашу точку :) Коды состояния 1xx являются информационными, 2xx Success, 3xx Redirection, 4xx Client Error и 5xx Server Error. Так что 302 не успех, а не ошибка. Так что это? В этом случае для этого модуля и функциональности это ошибка. Не спрашивайте почему :) –

2

Вы должны использовать err_headers_out(). Они будут напечатаны даже при ошибках и перенаправлениях.

Смежные вопросы