Search code examples
pythoncross-domainsimplehttpserver

Can I set a header with python's SimpleHTTPServer?


I'm using SimpleHTTPServer to test some webpages I'm working on. It works great, however I need to do some cross-domain requests. That requires setting a Access-Control-Allow-Origin header with the domains the page is allowed to access.

Is there an easy way to set a header with SimpleHTTPServer and serve the original content? The header would be the same on each request.


Solution

  • This is a bit of a hack because it changes end_headers() behavior, but I think it's slightly better than copying and pasting the entire SimpleHTTPServer.py file.

    My approach overrides end_headers() in a subclass and in it calls send_my_headers() followed by calling the superclass's end_headers().

    It's not 1 - 2 lines either, less than 20 though; mostly boilerplate.

    #!/usr/bin/env python
    try:
        from http import server # Python 3
    except ImportError:
        import SimpleHTTPServer as server # Python 2
    
    class MyHTTPRequestHandler(server.SimpleHTTPRequestHandler):
        def end_headers(self):
            self.send_my_headers()
    
            server.SimpleHTTPRequestHandler.end_headers(self)
    
        def send_my_headers(self):
            self.send_header("Access-Control-Allow-Origin", "*")
    
    
    if __name__ == '__main__':
        server.test(HandlerClass=MyHTTPRequestHandler)