不跨域.XMLHttpRequest无法加载localhost:portNo1.源localhost:portNo2不被

Not cross-domain. XMLHttpRequest cannot load localhost:portNo1 . Origin localhost:portNo2 is not allowed by Access-Control-Allow-Origin

本文关键字:localhost portNo1 portNo2 不被 加载 XMLHttpRequest      更新时间:2023-09-26

我在localhost:portNo1 上用Python从BaseHTTPServer.HTTPServer创建了一个服务器

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

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.file对象里面有什么。

在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文件,但这对我来说也没有意义。

我查看了网站,似乎错误通常是由跨域请求引起的。但是,我正在从一个本地主机端口到另一个端口进行通信。

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

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