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;

Reply via email to