Malheureusement, le serveur HTTP simple est vraiment aussi simple qu'il ne permet aucune personnalisation, surtout pas pour les en-têtes qu'il envoie. Vous pouvez cependant créer vous-même un serveur HTTP simple, en utilisant la plupart desSimpleHTTPRequestHandler
, et ajouter simplement l'en-tête souhaité.
Pour cela, créez simplement un fichier simple-cors-http-server.py
(ou autre) et, selon la version Python que vous utilisez, mettez l'un des codes suivants à l'intérieur.
Ensuite, vous pouvez le faire python simple-cors-http-server.py
et il lancera votre serveur modifié qui définira l'en-tête CORS pour chaque réponse.
Avec le shebang en haut, rendez le fichier exécutable et placez-le dans votre PATH, et vous pouvez simplement l'exécuter en utilisant simple-cors-http-server.py
aussi.
Solution Python 3
Python 3 utilise SimpleHTTPRequestHandler
et HTTPServer
du http.server
module pour exécuter le serveur:
#!/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)
Solution Python 2
Python 2 utilise SimpleHTTPServer.SimpleHTTPRequestHandler
et le BaseHTTPServer
module pour exécuter le serveur.
#!/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)
Solution Python 2 et 3
Si vous avez besoin de compatibilité pour Python 3 et Python 2, vous pouvez utiliser ce script polyglotte qui fonctionne dans les deux versions. Il essaie d'abord d'importer à partir des emplacements Python 3, puis revient à 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éthode soit correctement implémentée. En ce qui concerne les demandes simples, la solution consistant à envoyer uniquement l'en-Access-Control-Allow-Origin
tête devrait toujours fonctionner correctement.Essayez une alternative comme http-server
Comme SimpleHTTPServer n'est pas vraiment le type de serveur que vous déployez en production, je suppose ici que vous ne vous souciez pas beaucoup de l'outil que vous utilisez tant qu'il fait le travail d'exposer vos fichiers
http://localhost:3000
avec les en-têtes CORS dans un simple ligne de commandeBesoin de HTTPS?
Si vous avez besoin de https en local, vous pouvez également essayer caddy ou certbot
Quelques outils connexes que vous pourriez trouver utiles
ngrok : lors de l'exécution
ngrok http 3000
, il crée une URLhttps://$random.ngrok.com
qui permet à quiconque d'accéder à votrehttp://localhost:3000
serveur. Il peut exposer au monde ce qui s'exécute localement sur votre ordinateur (y compris les backends / apis locaux)localtunnel : presque le même que ngrok
now : lors de l'exécution
now
, il télécharge vos actifs statiques en ligne et les déploie surhttps://$random.now.sh
. Ils restent en ligne pour toujours, sauf si vous en décidez autrement. Le déploiement est rapide (sauf le premier) grâce aux différences. Convient désormais au déploiement de code frontend / SPA de production.Il peut également déployer des applications Docker et NodeJS. Ce n'est pas vraiment gratuit, mais ils ont un plan gratuit.la source
npm
sur une machine connue uniquement pour avoirpython
, je vote défavorable.J'ai eu le même problème et suis arrivé à cette solution:
J'ai simplement créé une nouvelle classe héritant de SimpleHTTPRequestHandler qui ne change que la
send_response
méthode.la source
Vous devrez fournir vos propres instances de do_GET () (et do_HEAD () si vous choisissez de prendre en charge les opérations HEAD). quelque chose comme ça:
la source