使用perl为302响应添加响应头

时间:2012-04-15 12:10:47

标签: perl http http-headers http-status-code-302

我正在尝试编写一个perl页面,该页面将http 302响应返回到其他位置,并为该响应添加自定义标头。 所以我想要的http响应应该是这样的:

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回复谷歌,但没有CUSTOM_HEADER。一旦我通过$r->status(200);将状态更改为200,我就会得到CUSTOM_HEADER。 那么这个行为怎么样?如何将我的标题添加到302响应?

2 个答案:

答案 0 :(得分:2)

您应该使用err_headers_out()。即使出现错误和重定向,也会打印出来。

答案 1 :(得分: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);