python - restful - Habilitar el control de acceso en el servidor HTTP simple
cors in flask (3)
Desafortunadamente, SimpleHTTPServer
es tan simple que no permite ninguna personalización, especialmente no de los encabezados que envía. Sin embargo, puede crear un servidor HTTP simple usted mismo, usando la mayoría de SimpleHTTPServerRequestHandler
, y simplemente agregue ese encabezado deseado.
Simplemente cree un archivo simple-cors-http-server.py
(o lo que sea) y coloque lo siguiente dentro:
#!/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)
Luego puede hacer python simple-cors-http-server.py
y se iniciará su servidor modificado que configurará el encabezado CORS para cada respuesta.
Con el shebang en la parte superior, haga que el archivo sea ejecutable y simple-cors-http-server.py
en su PATH, y puede ejecutarlo también usando simple-cors-http-server.py
.
Para una solución que funcione con Python 3, puede cambiar las importaciones anteriores para importar desde el módulo http.server
(todos los tipos están allí).
Alternativamente, puede usar esto que funciona tanto en Python 3 como en Python 2. El script primero intenta importar desde las ubicaciones de Python 3 y vuelve a 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)
Tengo el siguiente script de shell para un servidor HTTP muy simple:
#!/bin/sh
echo "Serving at http://localhost:3000"
python -m SimpleHTTPServer 3000
Me preguntaba cómo puedo habilitar o agregar un encabezado CORS como Access-Control-Allow-Origin: *
a este servidor?
Tendrá que proporcionar sus propias instancias de do_GET () (y do_HEAD () si elige soportar operaciones HEAD). algo como esto:
class MyHTTPServer(SimpleHTTPServer):
allowed_hosts = ((''127.0.0.1'', 80),)
def do_GET(self):
if self.client_address not in allowed_hosts:
self.send_response(401, ''request not allowed'')
else:
super(MyHTTPServer, self).do_Get()
Pruebe una alternativa como http-server
Dado que SimpleHTTPServer no es realmente el tipo de servidor que despliega en la producción, supongo que no le importa mucho la herramienta que utiliza, siempre que expone sus archivos en http://localhost:3000
con encabezados CORS en una línea de comando simple
# install (it requires nodejs/npm)
npm install http-server -g
#run
http-server -p 3000 --cors
Algunas herramientas relacionadas que pueden serle útiles
ngrok : cuando se ejecuta
ngrok http 3000
, crea una urlhttps://$random.ngrok.com
que permite a cualquiera acceder a su servidorhttp://localhost:3000
. Puede exponer al mundo lo que se ejecuta localmente en su computadora (incluidos backends / apis locales)localtunnel : casi lo mismo que ngrok
now : cuando se ejecuta
now
, carga sus activos estáticos en línea y los implementa enhttps://$random.now.sh
. Permanecen en línea para siempre a menos que decidas lo contrario. La implementación es rápida (excepto la primera) gracias a la diferencia. Ahora es adecuado para la implementación de código de frontend / SPA de producción. También puede implementar aplicaciones Docker y NodeJS. No es realmente gratis, pero tienen un plan gratuito.