AngularJs$http GET passing自定义头返回404

AngularJs$http GET passing自定义头返回404,angularjs,Angularjs,我读了很多关于它的博客,但我不知道如何解决我的问题 我需要将令牌作为自定义头传递给get$http。。我得到一个错误404,因为get请求变成了选项。 nodejs API Rest在我使用chrome“Rest控制台”应用程序测试时工作正常。我不太熟悉CSRF等,但我相信这可能是我与Angular联系Express服务器时遇到的问题 如那篇文章所述,Angular使用自己的X-XSRF-TOKEN进行CSRF保护。因此,在设置服务器时需要考虑到这一点 按照指南和ExpressV3,我所有的请

我读了很多关于它的博客,但我不知道如何解决我的问题

我需要将令牌作为自定义头传递给get$http。。我得到一个错误404,因为get请求变成了选项。
nodejs API Rest在我使用chrome“Rest控制台”应用程序测试时工作正常。

我不太熟悉CSRF等,但我相信这可能是我与Angular联系Express服务器时遇到的问题

如那篇文章所述,Angular使用自己的X-XSRF-TOKEN进行CSRF保护。因此,在设置服务器时需要考虑到这一点

按照指南和ExpressV3,我所有的请求都从客户端转到服务器端,神奇地开始工作

如果不是这样的话(而且我已经走了),请告诉我

您的完整服务器端配置是什么样子的

谢谢你,卡斯珀。。 这是启动此线程之前的服务器代码

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', 'DELETE', 'PUT');
next();
});
使用此服务器代码,每次我从客户端发送请求(GET)时,AngularJS都会添加一个自定义头“token”

因此,当您发送自定义标题而不是以下内容时:

Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type, but only if the value is one of:
  application/x-www-form-urlencoded
  multipart/form-data
  text/plain
cors类型的请求不再是带有自定义头的“简单”请求,因此当客户机发出请求时,实际上它首先使用方法“OPTIONS”发出预请求,然后执行“GET”。。在这两者之间,我得到了404错误

然后,我将以下内容添加到我的服务器:

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

    if ('OPTIONS' == req.method) {
        res.send(200);
    }
    else {
        next();
    }
//  next();
});
它本应与我添加的访问控制头一起工作,但它仍在发回404错误。。因此,解决办法是增加

if ('OPTIONS' == req.method) {
    res.send(200);
}
else {
    next();
}
因为正如我前面所说的,对于自定义头,客户机首先使用OPTIONS方法请求权限,然后发送适当的GET或其他内容

我没有找到另一个解决方案,因为这似乎是一个解决办法,但至少我不再陷入困境

这是关于CORS的一个很好且实用的链接

希望这对别人有帮助


King看起来像是跨浏览器限制问题。是的。。我想雷娜。。但是我在服务器端的应用程序上有这样的功能。all('/*',function(req,res,next){res.header(“访问控制允许源代码”,“*”);res.header(“访问控制允许头文件”,“X-request-With,Content-Type,token”);res.header('Access-Control-Allow-Methods','GET,POST','DELETE','PUT');res.header('Access-Control-Expose-Headers','token');next();});
if ('OPTIONS' == req.method) {
    res.send(200);
}
else {
    next();
}