Apache + Passenger not passing on custom status codes
- by harm
I'm currently building an API. This API communicates with the client via status codes. I created several custom status codes (as per http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6) in order to inform the client on certain things. For example I introduced the 481 status code to signify a specific client error.
The Rails app I wrote works like a charm. But when Apache and Passenger are serving it things run aground. When I provoke a 481 error the response header looks like this:
HTTP/1.1 500 Internal Server Error
Date: Wed, 19 May 2010 06:37:05 GMT
Server: Apache/2.2.9 (Debian) Phusion_Passenger/2.2.5 mod_ssl/2.2.9 OpenSSL/0.9.8g
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.5
Cache-Control: no-cache
X-Runtime: 1938
Set-Cookie: _session_id=32bc259dc763193ad57ae7dc19d5f57e; path=/; HttpOnly
Content-Length: 62
Status: 481
Content-Type: application/json; charset=utf-8
As you can see the original Status header is still there almost a the end. But the 'true' status header (the very first line) is quiet different. It seems that Apache doesn't like Status headers it has no knowledge of and thus assumes an error.
Is there anyway to fix this? Maybe via the mod_headers ( http://httpd.apache.org/docs/2.2/mod/mod_headers.html) module? I don't know enough of Apache to figure this out on my own.
Thanks,