【问题标题】:CORS with pysimplesoap server带有 pysimplesoap 服务器的 CORS
【发布时间】:2014-01-07 11:59:35
【问题描述】:

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

【问题讨论】:

    标签: javascript cors pysimplesoap


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2021-08-05
      • 2018-12-19
      • 2019-07-15
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多