On Saturday, April 13, 2013 12:21:33 AM UTC+2, Terry Jan Reedy wrote:
> I find the doc slightly confusing. The SO code uses BaseHTTPServer. The 
> doc says "Usually, this module isn’t used directly," On the other hand, 
> SimpleHTTPServer only defines a request handler and not a server itself.

Thanks for taking time to reply.

Well, I've seen presentations where BaseHTTPServer is a recommended way of 
running simple, ad-hoc web server. In addition the documentation of http.server 
module in Python 3.3 (which contains implementation of the same HTTPServer 
class as found in BaseHTTPServer module in Python 2.x) does not contain the 
statement you cited which I take to mean it can safely be used directly.

As Python 3.3.1 exhibits the same behavior let's focus on the following Python 
3 version of the code from the original question:

from http.server import SimpleHTTPRequestHandler
from http.server import HTTPServer

class MyRequestHandler(SimpleHTTPRequestHandler):
    #protocol_version = "HTTP/1.0"   # works
    protocol_version = "HTTP/1.1"   # hangs

server = HTTPServer(("localhost", 7080), MyRequestHandler)
server.serve_forever()

> What does 'hang' mean? Does the page get displayed? If so, 
> server.serve_forever is supposes to 'hang'.

I increased the number of resources to 7 to be able to detect possible 
patterns. The page and some of the resources are being displayed almost 
instantly. However browser waits for the requests to get remaining resources to 
finish and so those resources naturally are not being displayed. When browser 
waits the code is stuck at the line I showed in my original post. What's 
interesting is that after some time the request to get the second resource (in 
case there are only 2 on the page) finishes. However the time spent waiting for 
the second resource is ridiculously long compared to time spend waiting for the 
first resource. For example in one of my tests Firebug showed waiting time for 
the first resource to be 4ms whereas the waiting time for the second resource 
to be 1m 55s.

> The SO post says
> 
> class MyRequestHandler(SimpleHTTPRequestHandler):
>      #protocol_version = "HTTP/1.0"   # works
>      protocol_version = "HTTP/1.1"   # hangs
> 
> so this should be some sort of clue. The code says
> 
> 569 # The version of the HTTP protocol we support.
> 570 # Set this to HTTP/1.1 to enable automatic keepalive
> 571 protocol_version = "HTTP/1.0"

Sure, in version 1.1 of http the connection is not closed by default unless 
'Connection: Close' header was sent in request. Firefox sends all requests with 
'Connection: keep-alive' header.

I don't really know how to debug this...
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to