httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Juhani Connolly" <Juh...@ninja.co.jp>
Subject Forcing additional headers with Location: redirect
Date Wed, 07 Jan 2009 06:14:38 GMT
I'm currently working on modifying a php based application into an apache 
module.

The short of it is that I want to send a Location header with a 0 content 
length message and headers for cache-control and pragma.
Setting the headers, and returning HTTP_MOVED_TEMPORARILY the additional 
headers are stripped and the default message is sent.
Using ErrorDocument in my httpd.conf to use a 0 length file, the content 
length is correctly set to 0, but even the Location header gets stripped.
I am pretty sure the cause of my issue is unrelated to the additional 
headers, just needing me to send no content which is confusing the problem 
handsets. How can I cause this behaviour?

For anyone interested, the background of the situation, some source after 
the background:

In addition to logging an access to an image, this module will redirect the 
request based on some parameters to a different server. The php version 
would send Location, pragma: no-cache, cache-control: no-cache, 
must-revalidate and 0 content length, which worked perfectly for all 
clients.
Within the module I have set the location header as well as the pragma and 
cache-control, however only the location will go through, and the default 
302 message is sent. This is not generally a problem, except for with one of 
the local mobile phone handset manufacturers which fails to redirect the 
image correctly claiming a bad image.
Thus I am attempting to emulate the behaviour of the php, being unsure of 
which part is causing the problem. Most likely it would be the content being 
sent confusing the handset. Honestly I'd like to just ignore the particular 
manufacturer, but this is not an option.

Some source(stripped down to the essentials... In the actual version there's 
error handling and whatnot):

 curl_easy_setopt(hCurl, CURLOPT_URL, adUrl);  // url to get the redirect 
location from
 curl_easy_setopt(hCurl, CURLOPT_WRITEDATA, &outUrl);
 curl_easy_setopt(hCurl, CURLOPT_WRITEFUNCTION, outUrlWrite);

 if(curl_easy_perform(hCurl) == 0)
 {
  apr_table_setn(r->headers_out, "Location", outUrl);
 }

 r->content_type = CONTENT_TYPE_MOBILE;

 apr_table_setn(r->headers_out, "Cache-Control", "no-cache, 
must-revalidate");
 apr_table_setn(r->headers_out, "Pragma", "no-cache");

 curl_easy_cleanup(hCurl);

 return HTTP_MOVED_TEMPORARILY; 


Mime
View raw message