Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带有$http的访问控制允许标头不允许请求标头字段_Angularjs_Post_Http Headers_Request_Http Post - Fatal编程技术网

Angularjs 带有$http的访问控制允许标头不允许请求标头字段

Angularjs 带有$http的访问控制允许标头不允许请求标头字段,angularjs,post,http-headers,request,http-post,Angularjs,Post,Http Headers,Request,Http Post,我正在使用Postman Chrome Extension向服务发布帖子,我得到了预期的回复 但是,当我使用$http执行相同的POST请求时,一切都会陷入地狱 我得到一个: Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers 参与身份验证令牌作为标头 我不知道为什么邮递员和Chrome不兼容 有什么想法吗?问题是因为缺少请求头中的访问控制允许头。要解决这个问题,我们需要添

我正在使用Postman Chrome Extension向服务发布帖子,我得到了预期的回复

但是,当我使用
$http
执行相同的POST请求时,一切都会陷入地狱

我得到一个:

Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers
参与身份验证令牌
作为标头

我不知道为什么邮递员和Chrome不兼容


有什么想法吗?

问题是因为缺少请求头中的
访问控制允许头。要解决这个问题,我们需要添加
访问控制允许标头:
到请求标头

访问控制允许标头添加到
http请求标头
。您可以使用
$httpProvider
在应用程序级别执行此操作。在应用程序配置部分的下面一行添加此标题

var app = angular.module("app", [
    "ngRoute",
    "app.controllers",
    "app.directives",
    "app.filters"
]);

app.config([
    "$routeProvider",
    "$httpProvider",
    function($routeProvider, $httpProvider){
        $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
    }
]);

我相信在客户端上的$httpProvider上配置访问控制允许标头将不起作用。我认为需要在服务器上配置头(作为响应头)。例如,在node express应用程序中,这可以通过中间件(例如)实现,如下所示:

res.header('*')
或者(更有选择性地)只需要标题:

res.header('Engaged-Auth-Token, Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

如果在后端使用sails api,请更改cors.js并在此处添加您的令牌文件

module.exports.cors = {
  allRoutes: true,
  origin: '*',
  credentials: true,
  methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
  headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};

我认为这需要读取$httpProvider.defaults.headers.common['Access-Control-Allow-headers']='*';注意*周围的引号,否则会出现各种错误。