น่าเสียดายที่เซิร์ฟเวอร์ 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
และ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 คุณสามารถใช้สคริปต์หลายภาษานี้ซึ่งใช้ได้กับทั้งสองเวอร์ชัน ก่อนอื่นจะพยายามนำเข้าจากตำแหน่ง 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)