Sayangnya, server HTTP sederhana benar-benar sesederhana itu sehingga tidak memungkinkan penyesuaian apa pun, terutama untuk header yang dikirimnya. Namun Anda dapat membuat server HTTP sederhana sendiri, menggunakan sebagian besar SimpleHTTPRequestHandler
, dan cukup menambahkan header yang diinginkan.
Untuk itu, cukup buat file simple-cors-http-server.py
(atau apa pun) dan, tergantung pada versi Python yang Anda gunakan, masukkan salah satu kode berikut ke dalamnya.
Kemudian Anda bisa melakukannya python simple-cors-http-server.py
dan itu akan meluncurkan server Anda yang dimodifikasi yang akan mengatur header CORS untuk setiap respons.
Dengan shebang di bagian atas, buat file tersebut dapat dieksekusi dan masukkan ke PATH Anda, dan Anda juga dapat menjalankannya menggunakan simple-cors-http-server.py
.
Solusi Python 3
Python 3 menggunakan SimpleHTTPRequestHandler
dan HTTPServer
dari http.server
modul untuk menjalankan server:
#!/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)
Solusi Python 2
Python 2 menggunakan SimpleHTTPServer.SimpleHTTPRequestHandler
dan BaseHTTPServer
modul untuk menjalankan server.
#!/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)
Solusi Python 2 & 3
Jika Anda memerlukan kompatibilitas untuk Python 3 dan Python 2, Anda dapat menggunakan skrip polyglot yang berfungsi di kedua versi ini. Pertama kali mencoba untuk mengimpor dari lokasi Python 3, dan sebaliknya kembali ke 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
metode untuk diterapkan dengan benar. Adapun permintaan sederhana, solusi hanya mengirimkanAccess-Control-Allow-Origin
header harus tetap berfungsi dengan baik.Coba alternatif seperti http-server
Karena SimpleHTTPServer sebenarnya bukan jenis server yang Anda gunakan untuk produksi, saya berasumsi di sini bahwa Anda tidak terlalu peduli tentang alat mana yang Anda gunakan selama itu berfungsi untuk mengekspos file Anda
http://localhost:3000
dengan header CORS secara sederhana. garis komandoButuh HTTPS?
Jika Anda membutuhkan https di lokal Anda juga dapat mencoba caddy atau certbot
Beberapa alat terkait yang mungkin berguna bagi Anda
ngrok : saat dijalankan
ngrok http 3000
, ini membuat urlhttps://$random.ngrok.com
yang mengizinkan siapa pun mengakseshttp://localhost:3000
server Anda . Itu dapat mengekspos ke dunia apa yang berjalan secara lokal di komputer Anda (termasuk backend / apis lokal)localtunnel : hampir sama dengan ngrok
now : saat dijalankan
now
, aset statis Anda diupload secara online dan diterapkan kehttps://$random.now.sh
. Mereka tetap online selamanya kecuali Anda memutuskan sebaliknya. Deployment cepat (kecuali yang pertama) berkat diffing. Sekarang cocok untuk produksi frontend / penyebaran kode SPA. Ini juga dapat menerapkan aplikasi Docker dan NodeJS. Ini tidak benar-benar gratis, tetapi mereka memiliki paket gratis.sumber
npm
pada mesin yang hanya diketahui memilikipython
, saya downvote.Saya memiliki masalah yang sama dan sampai pada solusi ini:
Saya hanya membuat kelas baru yang mewarisi dari SimpleHTTPRequestHandler yang hanya mengubah
send_response
metode.sumber
Anda harus menyediakan contoh do_GET () (dan do_HEAD () Anda sendiri jika memilih untuk mendukung operasi HEAD). sesuatu seperti ini:
sumber