Niestety, prosty serwer HTTP jest naprawdę tak prosty, że nie pozwala na żadne dostosowanie, szczególnie nie w przypadku wysyłanych nagłówków. Możesz jednak samodzielnie utworzyć prosty serwer HTTP, używając większości SimpleHTTPRequestHandler
, i po prostu dodać żądany nagłówek.
W tym celu po prostu utwórz plik simple-cors-http-server.py
(lub cokolwiek) i, w zależności od używanej wersji Pythona, umieść w nim jeden z poniższych kodów.
Następnie możesz to zrobić python simple-cors-http-server.py
i uruchomi zmodyfikowany serwer, który ustawi nagłówek CORS dla każdej odpowiedzi.
Z shebang na górze, uczyń plik wykonywalnym i umieść go w swojej PATH, i możesz go po prostu uruchomić używając simple-cors-http-server.py
też.
Rozwiązanie Python 3
Python 3 używa SimpleHTTPRequestHandler
i HTTPServer
z http.server
modułu do uruchamiania serwera:
#!/usr/bin/env python3
from http.server import HTTPServer, SimpleHTTPRequestHandler, test
import sys
class CORSRequestHandler (SimpleHTTPRequestHandler):
def end_headers (self):
self.send_header('Access-Control-Allow-Origin', '*')
SimpleHTTPRequestHandler.end_headers(self)
if __name__ == '__main__':
test(CORSRequestHandler, HTTPServer, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000)
Rozwiązanie Python 2
Python 2 używa SimpleHTTPServer.SimpleHTTPRequestHandler
i BaseHTTPServer
modułu do uruchamiania serwera.
#!/usr/bin/env python2
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
class CORSRequestHandler (SimpleHTTPRequestHandler):
def end_headers (self):
self.send_header('Access-Control-Allow-Origin', '*')
SimpleHTTPRequestHandler.end_headers(self)
if __name__ == '__main__':
BaseHTTPServer.test(CORSRequestHandler, BaseHTTPServer.HTTPServer)
Rozwiązanie Python 2 i 3
Jeśli potrzebujesz kompatybilności zarówno z Pythonem 3, jak i Pythonem 2, możesz użyć tego skryptu poliglota, który działa w obu wersjach. Najpierw próbuje zaimportować z lokalizacji Python 3, a w przeciwnym razie wraca do Pythona 2:
#!/usr/bin/env python
try:
# 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: # 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)