1

我在 localhost:portNo1 有一个从 Python 中的 BaseHTTPServer.HTTPServer 创建的服务器

客户端位于 localhost:portNo2 和客户端,我正在发出一个 jQuery $.ajax POST 请求,如下所示:

var request = $.ajax({
        url: "http://localhost:portNo1",
        type: "post",
        dataType: 'json',
        data: json_data
    });

在服务器端,服务器从客户端获取数据并回复其数据。

def do_POST(self):
    # Get client data
    length = int(self.headers.getheader('content-length'))        
    data_string = self.rfile.read(length)
    print data_string;        
    # Create response object        
    jsonObjStr = json.dumps(jsonObj);
    self.send_response(200)        
    self.end_headers()
    self.wfile.write(jsonObjStr);

发生的情况是服务器正在获取我发送的数据,但没有回复客户端,并且 $.ajax 对象的失败事件的回调在客户端执行(错误消息)。我调试并验证了 jsonObj 没有任何内容。但我看不到 self.wfile 对象内部的内容。

在 JS 控制台上,我也收到以下错误(它显示在 Google Chrome 的 JS 控制台中,但未显示在 Firefox JS 控制台中):

XMLHttpRequest cannot load localhost:portNo1 . Origin localhost:portNo2 is not allowed by Access-Control-Allow-Origin. client.html:1

Google Chrome 的 JS 控制台指向 html 文件,但这对我来说也没有意义。

查了一下网站,貌似一般是跨域请求导致的。但是,我正在从一个本地主机端口通信到另一个。

4

1 回答 1

1

嗯,这就是问题所在。跨域限制不允许您在不发送Access-Control-Allow-Origin: *标头的情况下跨端口进行通信。

更好的解决方案是使用 Nginx 或其他一些网络服务器将这两个正在运行的应用程序反向代理到相同的域和端口。

于 2013-08-22T03:35:57.823 回答