Thật không may, máy chủ HTTP đơn giản thực sự đơn giản đến mức nó không cho phép bất kỳ tùy chỉnh nào, đặc biệt là không cho các tiêu đề mà nó gửi. Tuy nhiên, bạn có thể tự tạo một máy chủ HTTP đơn giản, sử dụng hầu hết SimpleHTTPRequestHandler
và chỉ cần thêm tiêu đề mong muốn đó.
Đối với điều đó, chỉ cần tạo một tệp simple-cors-http-server.py
(hoặc bất cứ thứ gì) và tùy thuộc vào phiên bản Python bạn đang sử dụng, hãy đặt một trong các mã sau vào bên trong.
Sau đó, bạn có thể làm python simple-cors-http-server.py
và nó sẽ khởi chạy máy chủ đã sửa đổi của bạn, máy chủ này sẽ đặt tiêu đề CORS cho mọi phản hồi.
Với shebang ở trên cùng, hãy làm cho tệp thực thi được và đưa nó vào PATH của bạn và bạn cũng có thể chạy nó bằng cách sử dụng simple-cors-http-server.py
.
Giải pháp Python 3
Python 3 sử dụng SimpleHTTPRequestHandler
và HTTPServer
từ http.server
mô-đun để chạy máy chủ:
#!/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)
Giải pháp Python 2
Python 2 sử dụng SimpleHTTPServer.SimpleHTTPRequestHandler
và BaseHTTPServer
mô-đun để chạy máy chủ.
#!/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)
Giải pháp Python 2 & 3
Nếu bạn cần khả năng tương thích cho cả Python 3 và Python 2, bạn có thể sử dụng tập lệnh đa ngôn ngữ này hoạt động trong cả hai phiên bản. Đầu tiên, nó cố gắng nhập từ các vị trí Python 3, và nếu không sẽ quay trở lại 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)