pythonsimplehttpserverwebdev.webserver

Why does SimpleHTTPServer redirect to ?querystring/ when I request ?querystring?


I like to use Python's SimpleHTTPServer for local development of all kinds of web applications which require loading resources via Ajax calls etc.

When I use query strings in my URLs, the server always redirects to the same URL with a slash appended.

For example /folder/?id=1 redirects to /folder/?id=1/ using a HTTP 301 response.

I simply start the server using python -m SimpleHTTPServer.

Any idea how I could get rid of the redirecting behaviour? This is Python 2.7.2.


Solution

  • Okay. With the help of Morten I've come up with this, which seems to be all I need: Simply ignoring the query strings if they are there and serving the static files.

    import SimpleHTTPServer
    import SocketServer
    
    PORT = 8000
    
    
    class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    
        def __init__(self, req, client_addr, server):
            SimpleHTTPServer.SimpleHTTPRequestHandler.__init__(self, req, client_addr, server)
    
        def do_GET(self):
            # cut off a query string
            if '?' in self.path:
                self.path = self.path.split('?')[0]
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    
    
    class MyTCPServer(SocketServer.ThreadingTCPServer):
        allow_reuse_address = True
    
    if __name__ == '__main__':
        httpd = MyTCPServer(('localhost', PORT), CustomHandler)
        httpd.allow_reuse_address = True
        print "Serving at port", PORT
        httpd.serve_forever()