具有$ http的Access-Control-Allow-Header不允许使用请求标头字段

Mor*_*rty 6 post http-post request http-headers angularjs

我正在使用Postman Chrome Extension对服务进行POST,我得到了预期的响应.

但是,当我使用相同的POST请求时$http,一切都会变成地狱.

我得到一个:

Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers
Run Code Online (Sandbox Code Playgroud)

Engaged-Auth-Token 作为标题.

我不知道为什么Postman有效并且它不适用于Chrome ...

有任何想法吗?

小智 7

我相信在CLIENT上的$ httpProvider上配置Access-Control-Allow-Headers将不起作用.我认为需要在服务器上配置标头(作为响应标头).例如,在一个节点表达式应用程序中,这可以通过中间件(例如)完成,如下所示:

res.header('*')
Run Code Online (Sandbox Code Playgroud)

或者(更有选择性地)只需要你需要的标题:

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


Adi*_*ngh 1

该问题是由于Access-Control-Allow-Headers请求标头丢失所致。为了解决这个问题,我们需要添加Access-Control-Allow-Headers: *到请求标头

添加一个Access-Control-Allow-Headershttp request header. 您可以使用在应用程序级别执行此操作$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'] = '*';
    }
]);
Run Code Online (Sandbox Code Playgroud)

  • 我相信这需要阅读 $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; 请注意 * 周围的引号,否则您会收到各种错误。 (10认同)