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)
HTTP/1.0 501 Unsupported method ('OPTIONS') Server: SimpleHTTP/0.6 Python/2.7.6 Date: Wed, 21 Jan 2015 23:16:10 GMT Content-Type: text/html Connection: close Access-Control-Allow-Origin: *
OPTIONS
método seja implementado corretamente. Quanto a solicitações simples, a solução de enviar apenas oAccess-Control-Allow-Origin
cabeçalho ainda deve funcionar bem.Tente uma alternativa como servidor http
Como SimpleHTTPServer não é realmente o tipo de servidor que você implanta para produção, estou assumindo aqui que você não se preocupa muito com a ferramenta que usa, desde que faça o trabalho de expor seus arquivos
http://localhost:3000
com cabeçalhos CORS de uma forma simples linha de comandoPrecisa de HTTPS?
Se você precisa de https no local, também pode tentar caddy ou certbot
Algumas ferramentas relacionadas que você pode achar úteis
ngrok : ao ser executado
ngrok http 3000
, cria uma urlhttps://$random.ngrok.com
que permite que qualquer pessoa acesse seuhttp://localhost:3000
servidor. Ele pode expor ao mundo o que é executado localmente em seu computador (incluindo back-ends / apis locais)localtunnel : quase o mesmo que ngrok
agora : quando em execução
now
, ele carrega seus ativos estáticos online e os distribuihttps://$random.now.sh
. Eles permanecem online para sempre, a menos que você decida o contrário. A implantação é rápida (exceto a primeira) graças ao diffing. Agora é adequado para implantação de código de frontend / SPA de produção. Ele também pode implantar aplicativos Docker e NodeJS. Não é realmente gratuito, mas eles têm um plano gratuito.fonte
npm
em uma máquina que só se sabe terpython
, eu voto negativo.Eu tive o mesmo problema e cheguei a esta solução:
Simplesmente criei uma nova classe herdada de SimpleHTTPRequestHandler que apenas altera o
send_response
método.fonte
Você precisará fornecer suas próprias instâncias de do_GET () (e do_HEAD () se escolher suportar operações HEAD). algo assim:
fonte