Infelizmente, o servidor HTTP simples é realmente tão simples que não permite nenhuma personalização, especialmente para os cabeçalhos que envia. No entanto, você mesmo pode criar um servidor HTTP simples, usando a maior parte dele SimpleHTTPRequestHandler
, e apenas adicionar o cabeçalho desejado.
Para isso, basta criar um arquivo simple-cors-http-server.py
(ou qualquer outro) e, dependendo da versão do Python que estiver usando, coloque um dos seguintes códigos dentro dele.
Então você pode fazer python simple-cors-http-server.py
e ele irá lançar seu servidor modificado que irá definir o cabeçalho CORS para cada resposta.
Com o shebang no topo, torne o arquivo executável e coloque-o em seu PATH, e você também pode executá-lo usando simple-cors-http-server.py
.
Solução Python 3
Python 3 usa SimpleHTTPRequestHandler
e HTTPServer
do http.server
módulo para executar o servidor:
#!/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)
Solução Python 2
Python 2 usa SimpleHTTPServer.SimpleHTTPRequestHandler
e o BaseHTTPServer
módulo para executar o servidor.
#!/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)
Solução Python 2 e 3
Se você precisa de compatibilidade para Python 3 e Python 2, pode usar este script poliglota que funciona em ambas as versões. Primeiro, ele tenta importar dos locais do Python 3 e, caso contrário, volta para o Python 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)