[mod_python] post request and the minimalistic handler

Daniel Nogradi nogradi at gmail.com
Sun Feb 19 12:13:24 EST 2006


I try to figure out exactly how an actual request gets converted into
an mp_request object, especially if its content-type is
multpart/form-data containing an uploaded file.

As a first step (with the zeroth step being reading the source of
publisher.py and util.py) I wanted to see what happens if the
minimalistic handler mentioned in the docs receives a POST requests
sent from a file upload form such as

<html><body>
<form enctype="multipart/form-data" method="post"
action="http://server/testhandler/x">
<input type="file" name="upload_this">
<input type="submit" name="go" value="Click this">
</form>
</body></html>

and apache is given the following:

<Directory /var/www/html/testhandler>
    SetHandler python-program
    PythonHandler mod_python.myhandler
    LimitRequestBody 0
</Directory>

and the request handler myhandler.py is:

from mod_python import apache

def handler( req ):
     req.content_type = "text/html"
     req.write( "hello" )
     return apache.OK

I would assume that no matter what kind of request comes in to the
hierarchy under /testhandler the response from the server should be
'hello' under all circumstances. With GET requests everything is okay,
the response is

HTTP/1.1 200 OK
Date: Sun, 19 Feb 2006 17:11:54 GMT
Server: Apache/2.0.53 (Fedora)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

5
hello
0

which gets displayed nicely by Firefox as 'hello'.

The trouble starts when POST request are coming in for example through
the html form above. After sending the form Firefox says 'The document
contains no data' in a warning window (actually it displays 'hello'
once or twice, but 99% of the time it just shows the warning). However
after checking the log files of apache it turns out that everything
went okay with the request, a 200 code was sent and the length of the
response is also correctly shown to be 5. So it seems that from the
point of view of the server everything went fine, but somehow Firefox
never gets (or it thinks it doesn't get) the 200 code and the response
containing 'hello'.

In order to see if it was really a Firefox issue I put together the
POST request by hand and sent it to the server with netcat and
everything went as expected, the output was the same as above.

So it seems it is a Firefox issue, but I'm a bit surprised that such a
simple example would not work with Firefox. Am I expecting something
that I shouldn't?



More information about the Mod_python mailing list