Daniel West
dwmp at opti.cgi.net
Mon Aug 23 04:19:39 EDT 2004
Thanks for the very informative post Jim! I was totally unaware of err_headers_out and your other suggestions were very helpful as well! Thank you! -Dan At 05:03 AM 8/23/2004 +0100, you wrote: >On Sunday 22 August 2004 09:14, Daniel West wrote: > > I have a script that needs to receive a request, set a cookie, and then > > redirect to another location. I'm using PSP on mod_python 3.1.3. I'm not > > getting the Set-Cookie header in the request response. >[snip] > > Why is it that mod_python seems to honor the Set-Cookie header for the OK > > status code, but not the others? > >Your mistake is in assuming that adding something to req.headers_out will >result in headers being sent out ;). > >For some reason, mod_python has separated the concept of response headers out >into two separate types - headers that are sent out in normal conditions, and >headers that are sent out in error conditions. I would guess that raising >any type of exception will cause mod_python to ignore normal headers (but >still pull out Location in the case of HTTP_SEE_OTHER). > >In other words, the working version of the code you posted is: > ><% >cookie = "..." # set the cookie to something >req.err_headers_out.add('Set-Cookie', cookie) # note use of err_headers_out >req.headers_out["Location"] = "http://..." >raise apache.SERVER_RETURN, apache.HTTP_SEE_OTHER >%> > >I personally think it's pretty silly to have two separate sets of headers, >I'm >guessing this is an internal Apache issue that is being exposed >unnecessarily. Especially in this case, it is nonsensical to consider a >simple redirect to be an error condition that should ignore normal headers. > >Also note that using psp.redirect() instead of raising an exception provides >the behaviour you want. Another alternative is to set req.status to what you >want and raise apache.OK. Also, it appears whoever wrote util.redirect() is >aware of the problem, as it manually sets req.status and then raises >apache.OK, rather than simply raising an exception with the correct value. > >Under what circumstances is having separate sets of headers useful? Does >anybody actually need this? It seems to me that it would be far more >intuitive to have headers_out sent for every type of response. At the very >least, 3xx status codes should not be treated as an error condition (that's >what 4xx and 5xx are for). > >-- >Jim Dabell > >_______________________________________________ >Mod_python mailing list >Mod_python at modpython.org >http://mailman.modpython.org/mailman/listinfo/mod_python
|