Graham Dumpleton
graham.dumpleton at gmail.com
Sat Aug 8 00:51:41 EDT 2009
2009/8/8 Graham King <graham at gkgk.org>: > It looks like it's mod_python, as I can reproduce it without Django. > Here's what I'm doing > > In my apache conf I have: > > <Location "/"> > SetHandler mod_python > PythonHandler test_mp > PythonDebug on > </Location> > > And test_mp.py is: > > def handler(req): > req.content_type = 'text/plain' > req.status = 278 You need to use mod_python form subversion repository trunk: https://issues.apache.org/jira/browse/MODPYTHON-226 and also set: req.status_line = '278 My Custom Error Description' If there is no status line associated with a non standard HTTP status, Apache will return a 500 error response instead. Since Django with its mod_python interface isn't going to be doing this, and can't anyway as it can't rely on people having non official release of mod_python, then you cant return custom status with Django. It will work with Django on mod_wsgi, but the description of the status used will be ''UNKNOWN STATUS CODE'', unless you fudge django.core.handlers.wsgi.STATUS_CODE_TEXT to also contain description for your custom status value. > req.write('Hello World!\n') > return 0 Should be: return apache.OK Graham > The access log has the HTTP status code 278: > 127.0.0.1 - - [07/Aug/2009:20:54:36 -0700] "GET / HTTP/1.1" 278 39 "-" > "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.13) Gecko/2009080315 > Ubuntu/9.04 (jaunty) Firefox/3.0.13" > > but a 500 is actually returned: > ---- > 21:06:13 graham at rufus:~$ telnet localhost 80 > Connected to localhost. > Escape character is '^]'. > GET / HTTP/1.1 > Host: localhost > > HTTP/1.1 500 Internal Server Error > Date: Sat, 08 Aug 2009 04:06:20 GMT > Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch > mod_python/3.3.1 Python/2.6.2 > Vary: Accept-Encoding > Transfer-Encoding: chunked > Content-Type: text/plain > > d > Hello World! > > 0 > ---- > > If I change the response code to any official one, 201 for example, it > works fine. > > PHP on the same Apache returns the 278, and mod_wsgi seems to work fine as well. > > Thanks, > Graham > > 2009/8/7 Graham Dumpleton <graham.dumpleton at gmail.com>: >> This is better asked on a Django list as unlikely that it would have >> anything to do with mod_python but how you are raising the errors in >> Django and whether Django allows you to override those errors. I would >> suggest that when you post to Django list, that you provide them code >> snippet to show how you are setting up that response status. >> >> Graham >> >> 2009/8/8 Graham King <graham at gkgk.org>: >>> Hi, >>> >>> When sending an unofficial HTTP response code (I tried 278, 209 and >>> 600) from a Django view, mod_python seems to be re-writing it to 500. >>> Django with mod_wsgi on the same server doesn't change the response >>> code. >>> >>> In mod_python.c (for mod_python 3.3.1) line 1730 there is this comment: >>> 'If the req->status or return code is a weird number that the server >>> doesn't know, it will default to 500 Internal Server Error.' >>> >>> Is this expected behavior? Is there any way around it? >>> I am trying to get a custom HTTP response code to Javascript (XMLHttpRequest). >>> >>> Thanks in advance, >>> Graham King >>> _______________________________________________ >>> Mod_python mailing list >>> Mod_python at modpython.org >>> http://mailman.modpython.org/mailman/listinfo/mod_python >>> >> >
|