К сожалению, простой HTTP-сервер действительно настолько прост, что не допускает никаких настроек, особенно для отправляемых им заголовков. Однако вы можете создать простой HTTP-сервер самостоятельно, используя большую часть SimpleHTTPRequestHandler
, и просто добавить нужный заголовок.
Для этого просто создайте файл simple-cors-http-server.py
(или что-то еще) и, в зависимости от версии Python, которую вы используете, поместите внутрь один из следующих кодов.
Затем вы можете это сделать, python simple-cors-http-server.py
и он запустит ваш измененный сервер, который будет устанавливать заголовок CORS для каждого ответа.
С помощью shebang вверху сделайте файл исполняемым и поместите его в свой PATH, и вы также можете просто запустить его, используя simple-cors-http-server.py
.
Решение Python 3
Python 3 использует модульSimpleHTTPRequestHandler
and HTTPServer
from для запуска сервера:http.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)
Решение Python 2
Python 2 использует SimpleHTTPServer.SimpleHTTPRequestHandler
и BaseHTTPServer
модуль для запуска сервера.
#!/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
Если вам нужна совместимость как для Python 3, так и для Python 2, вы можете использовать этот скрипт-полиглот, который работает в обеих версиях. Сначала он пытается импортировать из местоположений Python 3, а в противном случае возвращается к 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
правильной реализации метода. Что касается простых запросов, решение с отправкой толькоAccess-Control-Allow-Origin
заголовка должно работать нормально.Попробуйте альтернативу, например http-сервер
Поскольку SimpleHTTPServer на самом деле не тот сервер, который вы развертываете в производственной среде, я предполагаю, что вас не слишком заботит, какой инструмент вы используете, если он выполняет свою работу по раскрытию ваших файлов
http://localhost:3000
с помощью заголовков CORS в простой командная строкаНужен HTTPS?
Если вам нужен https на местном уровне, вы также можете попробовать caddy или certbot
Некоторые связанные инструменты, которые могут оказаться полезными
ngrok : при запуске
ngrok http 3000
он создает URL-адрес,https://$random.ngrok.com
который разрешает любому доступ к вашемуhttp://localhost:3000
серверу. Он может открыть миру то, что работает локально на вашем компьютере (включая локальные серверные части / apis).localtunnel : почти такой же, как ngrok
now : при запуске
now
он загружает ваши статические ресурсы в онлайн и развертывает их вhttps://$random.now.sh
. Они остаются в сети навсегда, если вы не решите иначе. Развертывание происходит быстро (кроме первого) благодаря различию. Теперь подходит для развертывания производственного интерфейса / кода SPA. Также можно развертывать приложения Docker и NodeJS. Это не совсем бесплатно, но у них есть бесплатный план.источник
npm
на машину, о которой известно толькоpython
, я голосую против.У меня была такая же проблема, и я пришел к такому решению:
Я просто создал новый класс, унаследованный от SimpleHTTPRequestHandler, который только изменяет
send_response
метод.источник
Вам нужно будет предоставить свои собственные экземпляры do_GET () (и do_HEAD (), если вы выберете поддержку операций HEAD). что-то вроде этого:
источник