(原因:缺少CORS标题'Access-Control-Allow-Origin')

时间:2016-06-01 09:58:50

标签: angularjs yii2

我的代码:

header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST'); header("Access-Control-Allow-Headers: X-Requested-With");

上面的代码我正在使用带头文件的api控制器。在html页面中,我使用angularjs表单字段。当我提交表单时,我收到了错误

(原因:缺少CORS标题'Access-Control-Allow-Origin')

当我使用文件输入时,我收到了(CORS header 'Access-Control-Allow-Origin' missing)

之类的错误

2 个答案:

答案 0 :(得分:0)

下面

我喜欢把我的CORS处理程序作为我的Express服务器中的一个中间件。我假设你的是app.js,因为你没有提到其他服务器文件。

var allowCrossDomain = function(req, res, next) {
    if ('OPTIONS' == req.method) {
      res.header('Access-Control-Allow-Origin', '*');
      res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
      res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
      res.send(200);
    }
    else {
      next();
    }
};

app.use(allowCrossDomain);

你需要首先在你的server.js文件中定义这个,你需要告诉服务器期望跨域请求。

如果您仍然不了解CORS的工作原理或如何配置,请阅读以下文章。

http://jonathanmh.com/how-to-enable-cors-in-express-js-node-js/ http://justindavis.co/2015/08/31/CORS-in-Express/

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
  res.header("Access-Control-Allow-Methods", "GET, POST","PUT");
  next();
});

或者您也可以从您的router.post发送它以进行实例

route.post('/abc', function(req,res,next){ 
        res.header('Access-Control-Allow-Origin', '*'); 
        res.header('Access-Control-Allow-Methods', 'GET, POST');
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
        return res.send(200);
    });

然后从角度部分发送标题。

答案 1 :(得分:0)

您在与客户项目不同的项目中调用Web服务。并且您已在Client项目中添加了服务引用。因此,当您从JavaScript调用服务时,您不允许这样做 它发生了,因为您的服务项目没有启用 CORS

请参阅此文章:What is CORS?

如何克服这个问题?

有一种方法可以解决这个问题,使用 JSONP example here

如何启用CORS?

  1. 在Service Project的web-config文件中添加Header Access-Control-Allow-Origin
  2. 在Service Project中创建Global.asax并将此代码添加到Global.asax.cs
  3. example here
    在两种方式中,无需在 RESTclient 项目解决方案中进行任何修改。