return value for response handler
return value for response handler
am 10.06.2008 09:41:40 von John ORourke
Hi folks,
I had a bug with an interesting side effect which I want to understand.
I wanted to redirect the user's browser, and in my response handler I
was setting $r->status(302) but returning Apache2::Const::OK instead of
the correct Apache2::Const::DONE.
This caused Apache to perform an internal redirect. Can someone explain
what was happening in terms of handlers and subrequests or point me to
the right doc page?
thanks
John
Re: return value for response handler
am 10.06.2008 11:07:50 von torsten.foertsch
On Tue 10 Jun 2008, John ORourke wrote:
> I had a bug with an interesting side effect which I want to understand.
>
> I wanted to redirect the user's browser, and in my response handler I
> was setting $r->status(302) but returning Apache2::Const::OK instead of
> the correct Apache2::Const::DONE.
>
> This caused Apache to perform an internal redirect. =A0Can someone explain
> what was happening in terms of handlers and subrequests or point me to
> the right doc page?
This is just a guess. So it may be completely wrong. But good old CGI allow=
s=20
you to send "Status: 200" along with a Location header to perform an intern=
al=20
redirect.
mod_perl does the same if the perl-script handler is used and PerlOptions=20
+ParseHeaders. So I'd dig in that direction if that matches your setup.=20
Otherwise it is probably an Apache thing.
If you find out what it was tell me, please.
Torsten
=2D-
Need professional mod_perl support?
Just hire me: torsten.foertsch@gmx.net
Re: return value for response handler
am 12.06.2008 17:21:04 von Geoffrey Young
Torsten Foertsch wrote:
> On Tue 10 Jun 2008, John ORourke wrote:
>> I had a bug with an interesting side effect which I want to understand.
>>
>> I wanted to redirect the user's browser, and in my response handler I
>> was setting $r->status(302) but returning Apache2::Const::OK instead of
>> the correct Apache2::Const::DONE.
return Apache2::Const::REDIRECT
>>
>> This caused Apache to perform an internal redirect. Can someone explain
>> what was happening in terms of handlers and subrequests or point me to
>> the right doc page?
>
> This is just a guess. So it may be completely wrong. But good old CGI allows
> you to send "Status: 200" along with a Location header to perform an internal
> redirect.
>
> mod_perl does the same if the perl-script handler is used and PerlOptions
> +ParseHeaders. So I'd dig in that direction if that matches your setup.
> Otherwise it is probably an Apache thing.
>
> If you find out what it was tell me, please.
http://www.mail-archive.com/modperl@perl.apache.org/msg04263 .html
this thread mentions it a few times
http://www.mail-archive.com/modperl@apache.org/msg36041.html
and I explain the internal mechanism here
http://markmail.org/message/hsxqvr37pdvqolgr
and I know I explained this at length dev@ in at least one drawn out
occasion, but I can't find it at the moment.
HTH
--Geoff
Re: return value for response handler
am 12.06.2008 17:37:27 von John ORourke
Geoffrey Young wrote:
>>> I wanted to redirect the user's browser, and in my response handler I
>>> was setting $r->status(302) but returning Apache2::Const::OK instead of
>>> the correct Apache2::Const::DONE.
> return Apache2::Const::REDIRECT
Unfortunately I can't easily do that here - I have plug-in modules which
could return any HTTP status, and then some post-processing which makes
use of the value of $r->status. I handle ErrorDocument properly though
by checking for a non-200 status before modifying it. Then later I
simply return OK or DONE depending on wether $r->status eq '200' or
not. I suppose I could just return ($r->status() eq '200)?OK:$r->status()
Re-reading the above, I suspect I can improve it a little.
>
> and I explain the internal mechanism here
>
> http://markmail.org/message/hsxqvr37pdvqolgr
That's filled in the gaps, many thanks.
John