К сожалению, простой 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)