不幸的是,简单的 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 使用来自http.server module 的SimpleHTTPRequestHandler 和HTTPServer 来运行服务器:
#!/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 module 来运行服务器。
#!/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)