javascript - CORS 与 pysimplesoap 服务器

标签 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?

最佳答案

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

  1. Access-Control-Allow-Origin 不能是通配符。它必须是一个特定的域。只需查看请求 header 并回显 Origin 字段即可。
  2. Access-Control-Allow-Headers 也应该是动态的,因为客户端/JS 往往会在其中抛出古怪的东西。回显 Access-Control-Request-Headers 字段。
  3. 还添加 Access-Control-Allow-Credentials: true header 。
  4. 为了进行调试,为了保持理智,请放入 Access-Control-Max-Age: 1 header 。如果没有这个 header ,浏览器将长时间缓存 OPTIONS 请求的结果。这对于生产部署来说很好,但对于测试来说却很烦人。

关于javascript - CORS 与 pysimplesoap 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20971082/

相关文章:

javascript - sublime 中 react 代码的语法高亮显示

ssl - 我可以在子域上使用通配符 ssl 证书,同时在域上使用基本 ssl 证书吗?

javascript - XMLHttpRequest无法加载XXX No'Access-Control-Allow-Origin' header

python - 如何从 Python 中的 Soap 响应中提取特定信息 (pysimplesoap)

javascript - getSomethingByAnother() 方法的 REST 风格是什么

javascript - 在文本输入字段上模拟退格键

javascript - AngularJs 范围变量不起作用

javascript - Fusion Tables 不支持 CORS(跨源资源共享)?

python-2.7 - 如何忽略 pysimplesoap 中的 SSL 证书验证

python - simplesoap Python virtualenv 的构建轮失败