list at joreybump.com
Wed May 31 12:16:13 EDT 2006
Deron Meranda wrote: > I don't know if this is mod_python or perhaps just an Apache > limitation, but is it possible to send back specific HTTP > headers for any 4xx response codes? > > In particular, I'm trying to send a 416 "Requested Range Not > Satisfiable", as well as a Content-Ranges header, but the > header is never sent back to the user agent. As per the > RFC 2616 spec section 14.16: > > "A server sending a response with status code 416 > (Requested range not satisfiable) SHOULD include a > Content-Range field with a byte-range-resp-spec of "*". > The instance-length specifies the current length of the > selected resource." > > Granted, it's a SHOULD rather than a MUST, but is it > even possible with Apache/mod_python? BTW, sending > headers works fine for any 2xx or 3xx reponses. > > Here's a minimal handler which demonstrates this. > > from mod_python import apache > def handler(req): > req.headers_out['Content-Range'] = "*/10000" > return apache.HTTP_RANGE_NOT_SATISFIABLE > > Any ideas? Here is what I do for HTTP_SEE_OTHER (303) redirects, which appears similar to what you are trying to do (except I'm using Publisher): def redirect(req, auth_url): """ Redirect to the authentication page. Use HTTP_SEE_OTHER to coax the browser into discarding any form data and requesting the page with a GET. Arguments: req: mod_python apache request object auth_url: redirection url """ status = apache.HTTP_SEE_OTHER req.headers_out['Location'] = auth_url req.status = status raise apache.SERVER_RETURN, status There's a little redundancy to support future modifications I haven't implemented yet. Ignore this. It works, and should provide a suitable basis. I haven't tested it with 4xx errors, though.