Angular $ http不会在OPTIONS飞行前发送标头

时间:2015-01-02 02:37:18

标签: angularjs http-headers cors

我正在尝试使用$ http服务连接到API,该服务需要为POST个请求定义某个标头:

app.run(['$http', function($http) {
    $http.defaults.headers.post.hello = 'world';
}]);

但是,我的Angular应用会在OPTIONS之前发送POST请求,但似乎并未发送自定义标头。

查看此Plunker中的网络标签:http://plnkr.co/edit/tcqIb2q9zIQb3nf2SzyT

请注意,请求发送hello标头的值world,但实际上不是:

enter image description here

我在hello中看到了access-control-request-header,但它不应该在自己的路线上吗?为什么不发送值world

1 个答案:

答案 0 :(得分:5)

当您添加标头时,因为您要跨越不同的域,请求首先通过OPTIONS方法将HTTP请求发送到另一个域上的资源,以确定实际请求是否可以安全发送。在此请求中,标头名称在access-control-request-headers中发送,以检查它是否是要发送的安全标头。

如果发送是安全的,那么将使用POST发送标题。

来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests