簡體   English   中英

不跨域。 XMLHttpRequest無法加載localhost:portNo1。 Access-Control-Allow-Origin不允許源localhost:portNo2

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

我有一個從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對象的fail事件的回調在客戶端執行(錯誤msg)。 我調試並驗證了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文件,但這對我來說也沒有意義。

我檢查了該網站,似乎該錯誤通常是由於跨域請求引起的。 但是,我正在從一個本地主機端口通信到另一個。

好吧,這就是問題所在。 跨域限制不允許您在不發送Access-Control-Allow-Origin: *標頭的情況下跨端口進行通信。

更好的解決方案是使用Nginx或其他Web服務器將這兩個正在運行的應用程序反向代理到相同的域和端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM