Angular $ http.post和No'Access-Control-Allow-Origin'标头

时间:2014-05-06 05:12:13

标签: javascript node.js angularjs angularjs-service

我有两个带有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找到一些主题,我找到thisthis。根据这些主题,我将服务器中的响应标题更改为:

res.writeHead(200, {
                          'Content-Type': 'application/json',
                          "Access-Control-Allow-Origin": "*"
                      });
                      res.end(JSON.stringify(result));

但这个剂量工作。我尝试使用firefox,chrome并使用Telerik Fiddler Web Debugger检查请求,但服务器仍处于暂挂状态,我收到了访问控制允许来源错误。

1 个答案:

答案 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请求