我正在开发一个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
并建立与节点服务器的连接,因此这部分设置正常。
非常感谢!
答案 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'