CORS与pysimplesoap服务器

时间:2014-01-07 11:59:35

标签: javascript cors pysimplesoap

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

1 个答案:

答案 0 :(得分:0)

CORS是一个特别顽固的标准。除了“基本”请求之外,对“选项”的静态响应将不起作用。你需要做一些改变:

  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请求的结果。这对于生产部署来说很好,但是为了测试它只会让人讨厌。