javascript - 不能跨域。 XMLHttpRequest 无法加载 localhost :portNo1 . Origin localhost:portNo2 不允许 Access-Control-Allow-Origin

标签 javascript python jquery

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

客户端位于 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 无法加载 localhost:portNo1 。 Access-Control-Allow-Origin 不允许 Origin localhost:portNo2。 client.html:1

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

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

最佳答案

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

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

关于javascript - 不能跨域。 XMLHttpRequest 无法加载 localhost :portNo1 . Origin localhost:portNo2 不允许 Access-Control-Allow-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371220/

相关文章:

javascript - 兄弟 div 上的 removeClass 不起作用

javascript - 样式 ="display:block;"适用于 Chrome 但不适用于 Safari

javascript - jQuery - 添加第二个变量来选择选项字段

python - 来自 keras : "Update your Conv2D call to the Keras 2 API" 的警告

c++ - 包装 std::vector 的 std::vector,C++ SWIG Python

jquery - 是否可以在 Facebook 应用程序中使用视差?

javascript - 更改按钮功能时出现未捕获的引用错误

javascript - 使用一个数据源 Kendo 的多个下拉列表

Python-如何使颜色条方向水平?

javascript - jQuery 切换动态生成的嵌套元素