我使用 pysimplesoap API 来支持 SOAP 服务器,代码如下:
httpd = BaseHTTPServer.HTTPServer(("", 8008), SOAPHandler)
httpd.dispatcher = dispatcher
httpd.serve_forever()
这很有效,但如果使用 JS/XMLHttpRequest 生成请求(CORS 问题),则效果不佳,因为 SOAPHandler 的默认实现不支持 OPTIONS 方法。我添加了这个:
class MySOAPHandler(SOAPHandler):
def do_OPTIONS(self):
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
self.send_header("Access-Control-Allow-Headers", "X-Requested-With")
self.end_headers()
但是代码仍然不支持CORS请求并且HTTP状态为0?
最佳答案
CORS 是一个特别顽固的标准。除了“基本”请求之外,您对选项的静态响应将不起作用。您需要进行一些更改:
Access-Control-Allow-Origin
不能是通配符。它必须是一个特定的域。只需查看请求 header 并回显Origin
字段即可。Access-Control-Allow-Headers
也应该是动态的,因为客户端/JS 往往会在其中抛出古怪的东西。回显Access-Control-Request-Headers
字段。- 还添加
Access-Control-Allow-Credentials: true
header 。 - 为了进行调试,为了保持理智,请放入
Access-Control-Max-Age: 1
header 。如果没有这个 header ,浏览器将长时间缓存 OPTIONS 请求的结果。这对于生产部署来说很好,但对于测试来说却很烦人。
关于javascript - CORS 与 pysimplesoap 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20971082/