Ответ 1
К сожалению, простой HTTP-сервер действительно настолько прост, что не допускает никакой настройки, особенно для заголовков, которые он отправляет. Однако вы можете создать простой HTTP-сервер самостоятельно, используя большую часть SimpleHTTPRequestHandler
, и просто добавить нужный заголовок.
Для этого просто создайте файл simple-cors-http-server.py
(или любой другой) и, в зависимости от используемой версии Python, поместите один из следующих кодов внутрь.
Затем вы можете сделать python simple-cors-http-server.py
и он запустит ваш измененный сервер, который будет устанавливать заголовок CORS для каждого ответа.
С притон в верхней части, сделать файл исполняемым и поместить его в PATH, и вы можете просто запустить его с помощью simple-cors-http-server.py
тоже.
Решение Python 3
Python 3 использует SimpleHTTPRequestHandler
и HTTPServer
из модуля 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, вы можете использовать этот скрипт polyglot, который работает в обеих версиях. Сначала он пытается импортировать из местоположений 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)