HTTP请求头字段"$http"未被Access-Control-Allow-Headers允许。

6
我正在使用Postman Chrome扩展向服务发送POST请求,得到了预期的响应。但是,当我使用$http进行相同的POST请求时,一切都变得糟糕了。我收到了以下错误消息:
Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers

Engaged-Auth-Token是一个头部信息。

我不知道为什么在Postman中可以工作,但在Chrome中却不能...

有任何想法吗?

3个回答

7

我认为在客户端上配置$httpProvider的Access-Control-Allow-Headers将不起作用。我认为需要在服务器上配置标头(作为响应标头)。例如,在node-express应用程序中,可以通过中间件来完成这项工作,放置以下内容:

res.header('*')

或者(更加有选择性地)仅提取您需要的标题:
res.header('Engaged-Auth-Token, Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

1
问题是由于请求头缺少Access-Control-Allow-Headers。为了解决这个问题,我们需要在请求头中添加Access-Control-Allow-Headers: *
http请求头中添加Access-Control-Allow-Headers。您可以使用$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'] = '*';
    }
]);

10
我认为这句话需要这样写:$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = ''; 注意号两边的引号,否则会出现各种错误。 - Jesse Carter

0

如果在后端使用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'
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接