我有两个带有nodejs的应用程序,而angularjs.nodejs应用程序有一些这样的代码:
require('http').createServer(function(req, res) {
req.setEncoding('utf8');
var body = '';
var result = '';
req.on('data', function(data) {
// console.log("ONDATA");
//var _data = parseInput( data,req.url.toString());
var _data = parseInputForClient(data, req.url.toString());
switch (req.url.toString()) {
case "/cubes":
{
此应用主机位于http://localhost:4000
。angularjs应用主机上http-server
上的节点localhost://www.localhost:3030
模块。在我的一个angularjs服务中我有这样的事情:
fetch:function(){
var data = '{somedata:"somedata"}';
return $http.post('http://localhost:4000/cubes',data).success(function(cubes){
console.log(cubes);
});
}
但是当此服务向服务器发送请求时会收到此错误:
XMLHttpRequest cannot load http://localhost:4000/cubes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3030' is therefore not allowed access.
所以我搜索网络和stackoverflow找到一些主题,我找到this和this。根据这些主题,我将服务器中的响应标题更改为:
res.writeHead(200, {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": "*"
});
res.end(JSON.stringify(result));
但这个剂量工作。我尝试使用firefox,chrome并使用Telerik Fiddler Web Debugger
检查请求,但服务器仍处于暂挂状态,我收到了访问控制允许来源错误。
答案 0 :(得分:3)
您执行POST请求,根据CORS规范生成预检请求:http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/和https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
您的服务器也应该响应OPTIONS方法(除了POST),并在那里返回Access-Control-Allow-Origin
。
您可以看到它的原因,因为当您的代码在“网络”选项卡(或Fiddler代理调试器)中创建请求时,您应该看到带有ORIGIN
标题的OPTIONS请求