Can I set a header with python's SimpleHTTPServer?

cross-domain, python, simplehttpserver

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)

Problem

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.

Original source