restful python cors simplehttpserver

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 url https://$random.ngrok.com que permite a cualquiera acceder a su servidor http://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 en https://$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.