Ajax从节点调用到django

时间:2014-12-24 01:15:45

标签: ajax django node.js socket.io cors

我正在开发一个django系统,我需要创建一个实时的聊天服务。为此,我使用了node.js和socket.io。

为了从django到节点获取一些信息我做了一些ajax调用,当每个地址都是localhost时,这些调用非常好,但是现在我已经将系统部署到webfaction了,我开始遇到一些错误。 / p>

djando服务器位于以下网址:example.com,节点服务器位于chat.example.com。当我对django进行ajax调用时,我在浏览器上遇到了这个错误:

XMLHttpRequest cannot load http://chat.example.com/socket.io/?EIO=3&transport=polling&t=1419374305014-4. Origin http://example.com is not allowed by Access-Control-Allow-Origin.

可能我误解了一些概念,但我很难搞清楚哪一个。

我认为问题所在的片段就是这个:

socket.on('id_change', function(eu){
    sessionid = data['sessionid']

    var options = {
        host: 'http://www.example.com',
        path: '/get_username/',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': sessionid.length
        }
    }
    var request = http.request(options, function(response) {
        response.on('data', function(msg){
            console.log('Received something')
            if(response.statusCode == 200){
                //do something here
                }
            }
        })
    })

    request.write(sessionid);
    request.end();
});

我设法服务socket.io.js并建立与节点服务器的连接,因此这部分设置正常。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您遇到了跨域资源共享问题。有关详情,请参阅此帖子:How does Access-Control-Allow-Origin header work?

我根本不是Django编码器,但是从这个参考页面(https://docs.djangoproject.com/en/1.7/ref/request-response/#setting-header-fields)看来你需要在生成响应的适当位置做这样的事情:

response = HttpResponse()
response['Access-Control-Allow-Origin'] = 'http://chat.example.com'