Skip to content

Instantly share code, notes, and snippets.

@khalidx
Last active September 21, 2023 02:24
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save khalidx/6d6ebcd66b6775dae41477cffaa601e5 to your computer and use it in GitHub Desktop.
Save khalidx/6d6ebcd66b6775dae41477cffaa601e5 to your computer and use it in GitHub Desktop.
Python SimpleHTTPServer with CORS, supporting both Python 2 and 3
#!/usr/bin/env python
# Usage: python simple_http_server_cors.py <port>
try:
# try to use Python 3
from http.server import HTTPServer, SimpleHTTPRequestHandler, test as test_orig
import sys
def test (*args):
test_orig(*args, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000)
except ImportError: # fall back to Python 2
from BaseHTTPServer import HTTPServer, test
from SimpleHTTPServer import SimpleHTTPRequestHandler
class CORSRequestHandler (SimpleHTTPRequestHandler):
def end_headers (self):
self.send_header('Access-Control-Allow-Origin', '*')
SimpleHTTPRequestHandler.end_headers(self)
if __name__ == '__main__':
test(CORSRequestHandler, HTTPServer)
@anselmobattisti
Copy link

You saved my life!

@mflux
Copy link

mflux commented Jun 8, 2019

This does not work with python 3

@khalidx
Copy link
Author

khalidx commented Jun 9, 2019

@mflux yup, it was for Python 2. I updated it to work with both Python 2 and 3. Thanks!

@AlbaraaKhayat
Copy link

Works great, thanks!

@khalidx
Copy link
Author

khalidx commented Feb 19, 2020

@mflux it should seamlessly work for both python 2 and 3 now (as of June 8, 2019)
@anselmobattisti @AlbaraaKhayat glad I could help!

@Jia-SH
Copy link

Jia-SH commented Jan 13, 2021

it works only in localhost.
change line 10:
test_orig(*args, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000), bind="0.0.0.0"

@Ragnoroct
Copy link

Ragnoroct commented Sep 23, 2021

Nice code. Works very nicely!

One question: What is the purpose of wrapping the code in test()? I'm not sure what that does.
edit: I see now test is a method in the http.server module that runs the server.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment