Desafortunadamente, el servidor HTTP simple es realmente tan simple que no permite ninguna personalización, especialmente no para los encabezados que envía. Sin embargo, puede crear un servidor HTTP simple usted mismo, utilizando la mayor parte SimpleHTTPRequestHandler
, y simplemente agregar el encabezado deseado.
Para eso, simplemente cree un archivo simple-cors-http-server.py
(o lo que sea) y, dependiendo de la versión de Python que esté usando, coloque uno de los siguientes códigos dentro.
Luego puede hacerlo python simple-cors-http-server.py
y lanzará 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 colóquelo en su PATH, y puede ejecutarlo usando simple-cors-http-server.py
también.
Solución Python 3
Python 3 usa SimpleHTTPRequestHandler
y HTTPServer
del http.server
módulo para ejecutar el 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)
Solución Python 2
Python 2 usa SimpleHTTPServer.SimpleHTTPRequestHandler
y el BaseHTTPServer
módulo para ejecutar el 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)
Solución Python 2 y 3
Si necesita compatibilidad tanto para Python 3 como para Python 2, puede usar este script políglota que funciona en ambas versiones. Primero intenta importar desde las ubicaciones de Python 3 y, de lo contrario, recurre 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)
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 se implemente correctamente. En cuanto a las solicitudes simples, la solución de enviar solo elAccess-Control-Allow-Origin
encabezado debería funcionar bien.Pruebe una alternativa como servidor http
Como SimpleHTTPServer no es realmente el tipo de servidor que implementa en producción, estoy asumiendo aquí que no le importa mucho qué herramienta usa siempre que haga el trabajo de exponer sus archivos
http://localhost:3000
con encabezados CORS en un simple línea de comando¿Necesitas HTTPS?
Si necesita https en local, también puede probar caddy o certbot
Algunas herramientas relacionadas que pueden resultarle útiles
ngrok : cuando se ejecuta
ngrok http 3000
, crea una URLhttps://$random.ngrok.com
que permite que cualquiera pueda acceder a suhttp://localhost:3000
servidor. Puede exponer al mundo lo que se ejecuta localmente en su computadora (incluidos backends / apis locales)localtunnel : casi lo mismo que ngrok
ahora : 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 decida 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 SPA / frontend de producción. También puede implementar aplicaciones Docker y NodeJS. No es realmente gratis, pero tienen un plan gratuito.fuente
npm
en una máquina que solo se sabe que tienepython
, voto en contra.Tuve el mismo problema y llegué a esta solución:
Simplemente creé una nueva clase heredada de SimpleHTTPRequestHandler que solo cambia el
send_response
método.fuente
Deberá proporcionar sus propias instancias de do_GET () (y do_HEAD () si elige admitir operaciones HEAD). algo como esto:
fuente