如何防止angular.js $ http对象发送X-Requested-With标头?

时间:2012-09-07 06:13:02

标签: javascript web-services xmlhttprequest angularjs

当使用$ http对象访问Web服务时,Angular.js会自动在请求中添加X-Requested-With:XMLHttpRequest标头。

我使用CORS访问的Web服务不支持X-Requested-With标头,所以我试图消除它,但我不能访问$ httpProvider对象。我得到一个未定义的对象错误,如果我在控制器参数中引用它,那么angular注入它我得到一个“错误:未知的提供者:$ httpProviderProvider< - $ httpProvider”

所以我想知道如何访问$ httpProvider,就像它在文档(http://docs.angularjs.org/api/ng.$http)中所说的那样告诉angular.js不要发送那个头文件。

4 个答案:

答案 0 :(得分:26)

angular.module('myModule', [])
    .config(['$httpProvider', function($httpProvider) {
        delete $httpProvider.defaults.headers.common["X-Requested-With"]
    }])

答案 1 :(得分:11)

我发现,除了Justen的回答,我也可以按照这样的要求进行:

delete $http.defaults.headers.common['X-Requested-With']

答案 2 :(得分:6)

由于不再需要Angular JS 1.1.1版删除标题。

请参阅更改日志:
https://github.com/angular/angular.js/blob/master/CHANGELOG.md#111-pathological-kerning-2012-11-26

对于像我这样使用标题识别ajax请求并以不同方式响应它们的人。

e.g。会议结束后提出请求。

您可以像这样重新启用标题:

angular.module('yourModule', [])
.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);

答案 3 :(得分:0)

由于不再需要Angular JS 1.1.1版删除标题。 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headers

提到了这一变化

如Josue所示,这可以轻松地再次添加到所有请求中,如下所示:

angular.module('yourModule', [])
    .config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
    }]);

设置header to undefined的配置,以删除特定外部请求的标头。

let urlExternalValidator = 'https://openiban.com/validate/' + this.iban + '?getBIC=true&validateBankCode=true';
this.$http.get(urlExternalValidator, {
    // simple request to not trigger a CORS preflight
    // https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    headers: {
        'X-Requested-With': undefined
    }
})
  

此外,您可以在config对象中提供headers属性   调用$ http(config)时传递,它会覆盖默认值   没有全局改变它们。

     

显式删除自动添加的标头   每个请求的$ httpProvider.defaults.headers,使用标题   属性,将所需标题设置为未定义

https://docs.angularjs.org/api/ng/service/ $ HTTP#设定-HTTP报头