1

我正在使用 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?

4

1 回答 1

0

CORS 是一个特别顽固的标准。您对 Options 的静态响应仅适用于“基本”请求。您需要进行一些更改:

  1. Access-Control-Allow-Origin可能不是通配符。它必须是一个特定的域。只需查看请求标头并回显该Origin字段。
  2. Access-Control-Allow-Headers也应该是动态的,因为客户端/JS倾向于在那里扔古怪的东西。回声Access-Control-Request-Headers领域。
  3. 还要添加一个Access-Control-Allow-Credentials: true标题。
  4. 为了调试,为了让自己保持清醒,请放入Access-Control-Max-Age: 1标题。如果没有此标头,浏览器将长时间缓存 OPTIONS 请求的结果。这对于生产部署来说很好,但对于测试它会变得很烦人。
于 2014-03-27T17:42:35.757 回答