Can I set a header with python's SimpleHTTPServer?

nynexman4464 picture nynexman4464 · Sep 19, 2012 · Viewed 30.4k times · Source

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.

Answer

berto picture berto · Nov 13, 2012

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
import SimpleHTTPServer

class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_my_headers()

        SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)

    def send_my_headers(self):
        self.send_header("Access-Control-Allow-Origin", "*")


if __name__ == '__main__':
    SimpleHTTPServer.test(HandlerClass=MyHTTPRequestHandler)