Leider ist der einfache HTTP-Server wirklich so einfach, dass er keine Anpassung zulässt, insbesondere nicht für die von ihm gesendeten Header. Sie können jedoch mit den meisten selbst einen einfachen HTTP-Server erstellen SimpleHTTPRequestHandler
und einfach den gewünschten Header hinzufügen.
Erstellen Sie dazu einfach eine Datei simple-cors-http-server.py
(oder was auch immer) und fügen Sie je nach verwendeter Python-Version einen der folgenden Codes ein.
Dann können Sie dies tun python simple-cors-http-server.py
und Ihr geänderter Server wird gestartet, wodurch der CORS-Header für jede Antwort festgelegt wird.
Machen Sie die Datei mit dem Shebang oben ausführbar und fügen Sie sie in Ihren PATH ein. Sie können sie auch einfach mit ausführen simple-cors-http-server.py
.
Python 3-Lösung
Python 3 verwendet SimpleHTTPRequestHandler
und HTTPServer
vom http.server
Modul , um den Server auszuführen:
#!/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)
Python 2-Lösung
Python 2 verwendet SimpleHTTPServer.SimpleHTTPRequestHandler
und das BaseHTTPServer
Modul , um den Server auszuführen.
#!/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)
Python 2 & 3 Lösung
Wenn Sie Kompatibilität für Python 3 und Python 2 benötigen, können Sie dieses polyglotte Skript verwenden, das in beiden Versionen funktioniert. Es wird zunächst versucht, von den Python 3-Speicherorten zu importieren, andernfalls wird auf Python 2 zurückgegriffen:
#!/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
ordnungsgemäße Implementierung der Methode erforderlich ist. Bei einfachen Anfragen sollte die Lösung, nur denAccess-Control-Allow-Origin
Header zu senden, weiterhin einwandfrei funktionieren.Versuchen Sie eine Alternative wie http-Server
Da SimpleHTTPServer nicht wirklich die Art von Server ist, die Sie für die Produktion bereitstellen, gehe ich hier davon aus, dass es Ihnen nicht so wichtig ist, welches Tool Sie verwenden, solange es die Aufgabe erfüllt, Ihre Dateien
http://localhost:3000
mit CORS-Headern in einer einfachen Version verfügbar zu machen BefehlszeileBenötigen Sie HTTPS?
Wenn Sie https in lokal benötigen, können Sie auch Caddy oder Certbot ausprobieren
Einige verwandte Tools, die Sie möglicherweise nützlich finden
ngrok : Beim Ausführen
ngrok http 3000
wird eine URL erstellthttps://$random.ngrok.com
, mit der jeder auf Ihrenhttp://localhost:3000
Server zugreifen kann. Es kann der Welt zeigen, was lokal auf Ihrem Computer ausgeführt wird (einschließlich lokaler Backends / APIs).localtunnel : fast das gleiche wie ngrok
Jetzt : Beim Ausführen
now
werden Ihre statischen Assets online hochgeladen und dort bereitgestellthttps://$random.now.sh
. Sie bleiben für immer online, sofern Sie nichts anderes entscheiden. Die Bereitstellung ist dank unterschiedlicher Einstellungen schnell (mit Ausnahme der ersten). Jetzt ist es für die Bereitstellung von Produktions-Frontend- / SPA-Code geeignet. Es können auch Docker- und NodeJS-Apps bereitgestellt werden. Es ist nicht wirklich kostenlos, aber sie haben einen kostenlosen Plan.quelle
npm
auf einem Computer erfordert, von dem nur bekannt ist, dasspython
ich sie habe.Ich hatte das gleiche Problem und kam zu dieser Lösung:
Ich habe einfach eine neue Klasse erstellt, die von SimpleHTTPRequestHandler erbt und nur die
send_response
Methode ändert .quelle
Sie müssen Ihre eigenen Instanzen von do_GET () (und do_HEAD () bereitstellen, wenn Sie HEAD-Operationen unterstützen möchten). etwas wie das:
quelle