0

我正在尝试编写一个 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。一旦我将状态更改为 200, $r->status(200);我确实得到了 CUSTOM_HEADER。那么这种行为是怎么回事?如何将我的标题添加到 302 响应中?

4

2 回答 2

2

你应该使用err_headers_out(). 即使出现错误和重定向,这些也会被打印出来。

于 2012-04-15T12:59:13.660 回答
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);
于 2012-04-15T13:59:12.203 回答